我的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();
}
}
我认为这优先于那些方法注释,我不知道如何解决这个问题。
答案 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();
}