在我的控制器中,我有两个端点,其中一个是安全的,另一个是公共的:
@GetMapping("/public")
public String getPublic() {
return "public";
}
@PreAuthorize("hasRole('USER')")
@GetMapping("/private")
public String getPrivate() {
return "public";
}
仅当我登录并且将具有正确角色的令牌放置在请求标头中时,安全端点才起作用。但是,当我想访问没有令牌的公共端点时,我总是会收到错误的状态401
需要完全身份验证才能访问此资源
这是我的安全配置:
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
public void configure(HttpSecurity http) throws Exception {
http
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.authorizeRequests().anyRequest().authenticated()
.and()
.csrf().disable();
}
}
和授权服务器配置:
@Configuration
@EnableAuthorizationServer
public class OAuth2AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter {
private final UserDetailsService appUserDetailService;
private final AuthenticationManager authenticationManager;
@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) {
endpoints
.tokenStore(tokenStore())
.tokenEnhancer(tokenEnhancer())
.authenticationManager(authenticationManager)
.userDetailsService(appUserDetailService);
}
}
我也尝试.authorizeRequests().anyRequest().authenticated()
对此.authorizeRequests().anyRequest().permitAll()
进行更改:没有更改。我的首选方式是使用批注处理安全性。谢谢。
您有两个选择,可以选择两个。
选项1:在您的端点中,像这样进行更改。
@PreAuthorize("permitAll()")
@GetMapping("/public")
public String getPublic() {
return "public";
}
并更改您的configure(HttpSecurity http)
方法,这样做。
@Override
public void configure(HttpSecurity http) throws Exception {
http
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.authorizeRequests()
.anyRequest().permitAll()
.and()
.csrf().disable();
}
选项2:在您的configure(HttpSecurity http)
方法中,就像这样。
@Override
public void configure(HttpSecurity http) throws Exception {
http
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.authorizeRequests()
.antMatchers("/public").permitAll()
.anyRequest().authenticated()
.and()
.csrf().disable();
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句