Java hasRole()和hasPermission()web安全表达式如何工作?
这实际上是两个问题,因为在Spring安全参考中没有很好地解释。第一个问题是,在我的配置中,我有如下代码:Java hasRole()和hasPermission()web安全表达式如何工作?,java,spring,spring-security,Java,Spring,Spring Security,这实际上是两个问题,因为在Spring安全参考中没有很好地解释。第一个问题是,在我的配置中,我有如下代码: @覆盖 受保护的无效配置(HttpSecurity http)引发异常{ http.authorizeRequests() .antMatchers(“/admin”).hasRole(“admin”) .antMatchers(“/admin”).access(“hasRole('admin')”); 那么,在这两种情况下,Spring在哪里寻找当前用户的角色呢?可能是在UserDet
@覆盖
受保护的无效配置(HttpSecurity http)引发异常{
http.authorizeRequests()
.antMatchers(“/admin”).hasRole(“admin”)
.antMatchers(“/admin”).access(“hasRole('admin')”);
那么,在这两种情况下,Spring在哪里寻找当前用户的角色呢?可能是在UserDetailsService上调用loadUserByUsername()方法,然后在获取的UserDetails上调用GetAuthories()方法吗
我的第二个问题是关于hasPermission()表达式的。假设我有一个自定义PermissionEvaluator,有没有办法使它在配置类中工作,例如:
@覆盖
受保护的无效配置(HttpSecurity http)引发异常{
http.authorizeRequests()
.antMatchers(“/admin”).access(“hasPermission(…)”)
或者这是一个只在方法级别工作的表达式?回答您的第二个问题:是的,您可以将自己的PermissionEvaluator与HttpSecurity一起使用。首先,您必须定义一个WebSecurity ExpressionHandler,如
final DefaultWebSecurityExpressionHandler webSecurityExpressionHandler = new DefaultWebSecurityExpressionHandler();
webSecurityExpressionHandler.setPermissionEvaluator(myPermissionEvaluator);
或者像豆子一样:
@Bean
public DefaultWebSecurityExpressionHandler webExpressionHandler(PermissionEvaluator myPermissionEvaluator) {
final DefaultWebSecurityExpressionHandler webSecurityExpressionHandler = new DefaultWebSecurityExpressionHandler();
webSecurityExpressionHandler.setPermissionEvaluator(siraPermissionEvaluator);
return webSecurityExpressionHandler;
}
/*this option then needs to autowire the bean*/
然后将其与HttpSecurity一起使用,如:
http.authorizeRequests().expressionHandler(webSecurityExpressionHandler)
.antMatchers("/admin").access("hasPermission(...)");