我试图使用@Component
来保护我的REST服务器,我已经实现了自己(意味着JWT中没有弹簧处理它自己,其他一切当然是JWT
)
我有这门课:Spring
。
我有一个过滤器,负责在JWTToken implements Authentication
设置JWTToken
个实例:
SecurityContextHolder
我也有调试这个的资源:
public class JwtFilter extends GenericFilterBean {
public void doFilter(...) {
....
JWTToken token = new JWTToken(jwt); // this init the Authentication object with all the jwt claims
SecurityContextHolder.getContext().setAuthentication(token);
....
}
我错过了一个我在网上任何资源中找不到的难题,这就是如何实现@RequestMapping(
value = "/protected_resource",
method = RequestMethod.POST
)
@RolesAllowed("admin")
public RESTResponse<String> debugJwt() {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); // here I can see that the context is the right one
return new RESTResponse<>("This was successful", "feedback message", true);
}
,特别是WebSecurityConfigurerAdapter
metohd。
当我尝试这样做时,例如:
configure(HttpSecurity http)
请求没有通过此请求,资源未被调用。
我在这里缺少什么?
答案 0 :(得分:2)
您的JWTToken
课程应该实施该方法:
Collection<? extends GrantedAuthority> getAuthorities();
实现应返回用户授予角色的集合,其中一个将是&#34; admin&#34;角色,如:
public Collection<? extends GrantedAuthority> getAuthorities() {
return Collections.singletonList(new SimpleGrantedAuthority("admin"));
}
当然,在您的情况下,您将查询数据库或JWT令牌并解析用户角色。