gpt4 book ai didi

java - Spring Security 权限编程检查

转载 作者:行者123 更新时间:2023-12-01 13:10:03 27 4
gpt4 key购买 nike

我已经部署了一个 Spring Security ACL 系统,它似乎工作正常,只是我不确定如何以编程方式执行权限检查。
我的应用程序分为 3 层( View 、服务(业务)、DAO),我想在服务层执行身份验证。因此,对于采用域对象作为参数的方法:

@PreAuthorize("hasPermission(#proj,'write'")
public Project updateProject(Project proj) {
.............
}

通过注释解决了问题。
但对于采用没有 acl 的对象作为参数的方法,我必须以编程方式检查用户是否具有权限。
假设我有一个对象 ProjectWrapper:

public class ProjectWrapper {

private Project project;
private Something something;
// setters and getters here
}

所以现在我的服务方法收到了这种类型的参数:

public Project updateProject(ProjectWapper projWrapp) {

Project p = projWrapp.getProject();
// before performing any operation on project I need to know if current user has neccessary permissions on this object
// ??? how do i check that ?

}

我需要使用 AclService 来执行该操作吗?就像我需要创建/更新权限一样,或者是否有更干净/更好的可能性?
对于deleteProject(Long id)方法有同样的问题,因为首先我必须从数据库获取对象来检查当前用户是否具有删除权限。

最佳答案

方法安全注释支持 Spring EL 表达式。对于您的包装类,您可以按如下方式使用它。

@PreAuthorize("hasPermission(#projectWrapper.project, 'write'")
public Project updateProject(ProjectWrapper projectWrapper) {
// body omitted
}

如果您只有一个对象标识符而不是实际对象,则可以使用下面的模式。

@PreAuthorize("hasPermission(#id, 'my.package.Project' 'delete'")
public void deleteProject(Long id) {
// body omitted
}

您可能需要调整默认配置(例如检索对象身份的策略等)以满足您的要求。有关更多详细信息,请参阅 org.springframework.security.acls.AclPermissionEvaluator 类。

关于java - Spring Security 权限编程检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22953397/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com