<security:authorize access="hasPermission( 'or', 'formDialog:edit')"> 中的hasPermission如何自定义为MyPermissionEvaluator中的方法,而不是默认方法
时间: 2024-05-04 15:21:03 浏览: 82
要自定义 `hasPermission` 方法,您需要实现 `PermissionEvaluator` 接口并在 Spring Security 配置中注册自己的 `PermissionEvaluator` 实现。
例如,您可以创建一个 `MyPermissionEvaluator` 类来实现自定义权限检查逻辑:
```java
@Component
public class MyPermissionEvaluator implements PermissionEvaluator {
@Override
public boolean hasPermission(Authentication authentication, Object targetDomainObject, Object permission) {
// 自定义权限检查逻辑
// authentication:当前用户的认证信息
// targetDomainObject:要检查权限的目标对象
// permission:要检查的权限字符串(如 "read"、"write" 等)
// 返回 true 表示有权限,返回 false 表示无权限
}
@Override
public boolean hasPermission(Authentication authentication, Serializable targetId, String targetType, Object permission) {
// 通常情况下,我们只需要实现 hasPermission(Authentication, Object, Object) 方法即可。
// 如果您需要使用基于 ID 的权限检查,那么也需要实现这个方法。
throw new UnsupportedOperationException();
}
}
```
然后在 Spring Security 配置中注册 `MyPermissionEvaluator` 实现:
```java
@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfig extends GlobalMethodSecurityConfiguration {
@Autowired
private MyPermissionEvaluator myPermissionEvaluator;
@Override
protected MethodSecurityExpressionHandler createExpressionHandler() {
DefaultMethodSecurityExpressionHandler expressionHandler =
new DefaultMethodSecurityExpressionHandler();
expressionHandler.setPermissionEvaluator(myPermissionEvaluator);
return expressionHandler;
}
}
```
现在您可以在您的权限表达式中使用 `MyPermissionEvaluator` 中定义的自定义权限检查逻辑了:
```xml
<security:authorize access="hasPermission('read', someObject)">...</security:authorize>
```
阅读全文