Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java hasRole()和hasPermission()web安全表达式如何工作?_Java_Spring_Spring Security - Fatal编程技术网

Java hasRole()和hasPermission()web安全表达式如何工作?

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

这实际上是两个问题,因为在Spring安全参考中没有很好地解释。第一个问题是,在我的配置中,我有如下代码:

@覆盖
受保护的无效配置(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(...)");