@PreAuthorize(permitAll)仍然需要身份验证

时间:2015-11-05 10:05:37

标签: spring spring-security

我的Repository(带@RepositoryRestResource注释)中有以下示例方法:

@Override
@PreAuthorize("permitAll")
@PostAuthorize("permitAll")
public Iterable<User> findAll();

但是当我将这些401 Unauthorized注释添加到整个存储库界面时,我仍然会收到permitAll事件。

我将此作为我的WebSecurityConfigurerAdapter

@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
@Configuration
class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(final HttpSecurity http) throws Exception {
        http.authorizeRequests().anyRequest().fullyAuthenticated().and().httpBasic().and().csrf().disable();
    }
}

我认为这优先于那些方法注释,我不知道如何解决这个问题。

1 个答案:

答案 0 :(得分:8)

在Web安全过滤器之后应用方法安全性。

由于您的配置中包含anyRequest().fullyAuthenticated(),因此您的findAll方法永远不会被点击。 anyRequest().fullyAuthenticated()表示所有尝试访问没有完全用户身份验证的Web端点的尝试都将失败。

来自JavaDoc

  

指定经过身份验证的用户允许使用的URL   不记得&#34;。

您需要在网络安全中添加其他路径,例如。

protected void configure(final HttpSecurity http) throws Exception {
    http.authorizeRequests()
            .anyRequest().fullyAuthenticated()
            .antMatchers(HttpMethod.GET, '/somePath').permitAll()
         .and()
            .httpBasic()
         .and()
            .csrf().disable();
}