Spring Security-为授权添加自定义过滤器

时间:2018-08-03 12:32:26

标签: spring spring-security

我们正在实现一些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中做些事情,但是不知道如何

1 个答案:

答案 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