我试图用注释(@Secured
和@PreAuthorize
)替换一些手动权限检查。在调试它为什么不起作用时,我惊讶地发现这两个断言中的第二个在@RequestMapping
控制器方法的顶部失败了。
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
assert(auth.getAuthorities().contains(new SimpleGrantedAuthority("ROLE_READER"))); // passes
assert(request.isUserInRole("ROLE_READER")); // fails
我假设(因为我无法让他们授权任何事情)@Secured
并hasRole()
使用后者查找?
这些角色不应该从SecurityContext
当局自动填充吗?
Authentication
设置应该分别添加角色的过滤器是吗?
编辑:
将 spring 安全配置减少到 spring boot 的(1.3.0)默认值,加上设置身份验证的过滤器。
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.addFilterBefore(new JwtAuthenticationFilter(), FilterSecurityInterceptor.class);
}
}