XML 自定义PermissionEvaluator方法
时间: 2023-11-08 11:57:04 浏览: 34
在 Spring Security 中,可以通过实现 PermissionEvaluator 接口来自定义权限验证逻辑。
首先,需要在配置文件中开启自定义 PermissionEvaluator 的支持:
```xml
<beans:bean id="expressionHandler" class="org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler">
<beans:property name="permissionEvaluator" ref="customPermissionEvaluator" />
</beans:bean>
<beans:bean id="customPermissionEvaluator" class="com.example.CustomPermissionEvaluator" />
```
接下来,实现 PermissionEvaluator 接口的 evaluate 方法:
```java
public class CustomPermissionEvaluator implements PermissionEvaluator {
@Override
public boolean hasPermission(Authentication authentication, Object targetDomainObject, Object permission) {
// 在此处编写自定义的权限验证逻辑
}
@Override
public boolean hasPermission(Authentication authentication, Serializable targetId, String targetType, Object permission) {
// 在此处编写自定义的权限验证逻辑
}
}
```
在 evaluate 方法中,第一个参数 authentication 表示当前用户的认证信息,第二个参数 targetDomainObject 表示要验证的对象,第三个参数 permission 表示要验证的权限。
如果要验证的对象是一个实体类,可以使用 @PreAuthorize 或 @PostAuthorize 注解配合 SpEL 表达式来进行验证:
```java
@PreAuthorize("hasPermission(#entity, 'read')")
public void doSomething(Entity entity) {
// ...
}
```
在 SpEL 表达式中,可以使用 #parameterName 来引用方法参数,也可以使用 #returnObject 来引用方法返回值。