这些实际上是两个问题,因为它在Spring Security参考中没有得到很好的解释。第一个问题是,在我的配置中,我有一个这样的代码:
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/admin").hasRole("ADMIN")
.antMatchers("/admin").access("hasRole('ADMIN')");
然后Spring在哪里寻找当前用户在这两种情况下的角色?它是否可能在UserDetailsService上调用loadUserByUsername()方法,然后在获取的UserDetails上调用getAuthorities()?
我的第二个问题是关于hasPermission()表达式。假设我有一个自定义的PermissionEvaluator,有没有办法使它在配置类中工作,例如:
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/admin").access("hasPermission(...)")
或者这是一个仅适用于方法级别的表达式吗?
答案 0 :(得分:0)
回答您的第二个问题:是的,您可以使用自己的PermissionEvaluator和HttpSecurity。首先,您必须定义WebSecurityExpressionHandler,如
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(...)");