<security:authorize access="hasPermission ,点击hasPermission 只能跳转到Spring-security-core.jar里的方法,不能跳转到自定义的方法
时间: 2023-06-17 09:08:48 浏览: 152
SpringSecurity如何实现配置单个HttpSecurity
这是因为`hasPermission`是Spring Security提供的授权表达式语言中的一种方法,它是在`spring-security-core.jar`中的类中实现的。如果您想要使用自定义的方法来进行权限控制,可以使用自定义的Security表达式语言来代替`hasPermission`。您可以在Security表达式中使用自定义的方法来进行权限判断,例如:
```
<security:authorize access="customPermission('permissionName')">
```
然后在您的自定义表达式类中实现`customPermission`方法,并在Spring Security配置中将其注册为表达式:
```
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
public void configure(WebSecurity web) throws Exception {
web.expressionHandler(new DefaultWebSecurityExpressionHandler() {
@Override
protected SecurityExpressionOperations createSecurityExpressionRoot(Authentication authentication, FilterInvocation fi) {
CustomWebSecurityExpressionRoot root = new CustomWebSecurityExpressionRoot(authentication, fi);
root.setPermissionEvaluator(permissionEvaluator());
return root;
}
});
}
@Bean
public PermissionEvaluator permissionEvaluator() {
return new CustomPermissionEvaluator();
}
}
```
在这个例子中,`CustomPermissionEvaluator`是一个实现了Spring Security的`PermissionEvaluator`接口的自定义权限评估器,它会被`CustomWebSecurityExpressionRoot`使用。`CustomWebSecurityExpressionRoot`是一个自定义的表达式根对象,它继承了默认的`WebSecurityExpressionRoot`类,并添加了一个`customPermission`方法。在这个方法中,您可以使用自己的业务逻辑来判断用户是否拥有指定的权限。
阅读全文