我正在尝试使用已实现自我的JWT
保护我的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
,尤其是configure(HttpSecurity http)
metohd的方法。例如,当我尝试这样做时:
http.authorizeRequests().anyRequest().authenticated()
请求没有通过此请求,资源也没有被调用。
我在这里想念什么?
最佳答案
您的JWTToken
类应实现以下方法:
Collection<? extends GrantedAuthority> getAuthorities();
该实现应返回用户授予的角色的集合,其中一个将是“admin”角色,例如:
public Collection<? extends GrantedAuthority> getAuthorities() {
return Collections.singletonList(new SimpleGrantedAuthority("admin"));
}
当然,根据您的情况,您将查询数据库或JWT token 并解析用户角色。