【发布时间】:2020-05-23 16:44:50
【问题描述】:
在我的控制器中,我有两个端点,一个是安全的,一个是公共的:
@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(),但没有任何更改。我首选的方法是使用注释处理安全性。谢谢。
【问题讨论】:
标签: spring spring-boot spring-security spring-security-oauth2