我们正在实现一些API。 身份验证是在前端完成的,它会在授权标头中向我们发送承载。
我们创建了一种方法,该方法用于验证令牌(调用某些REST服务xxx),而另一种方法用于返回用户具有的角色列表。
是否可以创建一个过滤器来进行此验证?
public class JWTAuthorizationFilter extends BasicAuthenticationFilter {
@Override
protected void doFilter(HttpServletRequest req,
HttpServletResponse res,
FilterChain chain) throws IOException, ServletException {
System.out.println("IN FILTER");
String header = req.getHeader("Authorization");
if (header == null || !header.startsWith("Bearer")) {
chain.doFilter(req, res);
return;
}
String token = request.getHeader(HEADER_STRING);
if (validateMyToken(token)) {
List<String> mygroups = getMyGroups(token);
} else {
throw new InvalidTokenException("Token is not Ok :(");
}
#HOW DO I PUT MY GROUPS, SOMEWHERE FOR VERIFICATION ???
}
}
并在我的控制器中使用它:
@RestController
@RequestMapping(value = "/applications/")
public class TestController {
@PreAuthorize("hasRole('ROLE_ADMIN')")
@GetMapping(value = "/test")
public String getContacts() {
System.out.println("IN CONTROLLER");
return "toto";
}
}
我知道我必须在WebSecurity中做些事情,但是不知道如何
答案 0 :(得分:0)
您需要创建自定义Array ( [position] => position2 )
实现https://docs.spring.io/spring-security/site/docs/4.2.6.RELEASE/apidocs/org/springframework/security/core/userdetails/UserDetails.html。之后,根据您的UserDetails
创建适当的Authorities
集合。如果您想使用角色来保护方法,只需将其标记为List<String> mygroups = getMyGroups(token);
/ @Secured
或就像您使用@RolesAllowed