繁体   English   中英

使用Spring Security ACL

[英]Using Spring Security ACL

我试图在我的应用程序中实现Spring Security ACL。 我有很多我想要使用ACL的类。

我在文档中读到AOP之前已经成功使用过。 这是否意味着所有服务都应该有一个公共接口,用于对对象进行CRUD以最大程度地重用该建议?

或者在保存,更新,删除服务方法中手动插入,删除...是否正常?

我无法找到许多人们如何使用框架的例子。

----实体删除的监听器(包括级联删除)-----

package com.acme.model.aspects;

import javax.annotation.PostConstruct;
import javax.persistence.PreRemove;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
import org.springframework.util.Assert;
import org.springframework.data.domain.Persistable;

import com.acme.PermissionService;

@Component
public class ObjectIdentityListener {

    private static final Logger LOG = LoggerFactory.getLogger(ObjectIdentityListener.class);

    static private PermissionService permissionService;

    @Autowired(required = true)
    @Qualifier("permissionService")
    public void setSearchService(PermissionService _permissionService)
    {
        permissionService = _permissionService;
    }

    @PreRemove
    public void preRemove(Object object) {
        if(object instanceof Persistable) {
            LOG.info("Deleting object identity for class {} id {} ", persistable.getClass(), persistable.getId());
            permissionService.deleteObjectIdentity((Persistable) object);
        }
    }

    @PostConstruct
    public void init() {
        Assert.notNull(permissionService, "'permissionService' is required");
    }
}

----删除permissionService的方法----

public void deleteObjectIdentity(Persistable persistable) {
    try{
        MutableAcl acl = (MutableAcl) mutableAclService.readAclById(identity(persistable));
        mutableAclService.deleteAcl(acl.getObjectIdentity(), true);
    } catch (NotFoundException e){
        LOG.info("Could not find ACL for target {}", persistable);
    }
}

这一切都取决于你的应用程序。 拥有集中的服务层次结构肯定会使创建/检索/更新/删除方法的单一安全性检查变得更加简单。 但是,您有一个不同服务的现有应用程序,不一定有一个共同的父实现,那么您必须在每个服务方法上添加ALC安全注释。

另一个选择是在你的DAO层上放置ACL安全性,它工作正常,但由于某种原因只是感觉不对。 恕我直言不应该处理安全问题。 我已经花了很多时间处理Spring Security ACL,现在已经很好地处理了它,如果你需要任何具体的例子,请给我打电话。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM