频道
bg

Spring Security ACL

coding十一月 12, 20171mins
Spring Security

Spring Security ACL 默认提供了 AclEntryAfterInvocationProvider ,使用Acl.isGranted(Permission[] permission, Sid[] sids, boolean administrativeMode) 来判断是否有权限访问。

但是比较通用的还是使用默认的GlobalMethodSecurityConfiguration 中定义的注册了ExpressionBasedPostInvocationAdvicePostInvocationAdviceProvider它会去读取注解来判断。

他们是@PreAuthorize, @PreFilter, @PostAuthorize, @PostFilter

特殊变量的用法

@PreAuthorize(“#contact.name == authentication.name”) @PostAuthorize(“hasPermission(returnObject, ‘read’) ”) @PostFilter(“hasPermission(filterObject, ‘read’) or hasPermission(filterObject, ‘admin’)“)

hasPermission表达式专门用于ACL判断,它依赖于PermissionEvaluator,ACL模块对应的是AclPermissionEvaluator

java

public class MethodSecurityConfig extends GlobalMethodSecurityConfiguration {
@Override
protected MethodSecurityExpressionHandler createExpressionHandler() {
DefaultMethodSecurityExpressionHandler expressionHandler = new DefaultMethodSecurityExpressionHandler();
expressionHandler.setPermissionEvaluator(aclPermissionEvaluator());
return expressionHandler;
}
……
}

评论


新的评论

匹配您的Gravatar头像

Joen Yu

@2022 JoenYu, all rights reserved. Made with love.