【问题标题】:Mock spring security roles through the header with JWT使用 JWT 通过标头模拟 spring 安全角色
【发布时间】:2020-02-20 01:30:36
【问题描述】:

可以使用 Spring Security 制作一个非常简单的 JWT 示例。

我想说明如何使用角色,而不需要设置所有的 spring 安全性。

基本上,我想将邮递员与包含角色的 jwt 令牌一起使用。我不想设置用户登录。有可能吗?

【问题讨论】:

  • 令牌是登录。尽管如此,您仍然需要设置 Spring Security,否则它将无法工作。您需要一个 JwtFilter 来解码令牌并进行登录。

标签: spring spring-boot spring-security jwt


【解决方案1】:

您可以创建 JWTFilter 类并扩展 GenericFilterBean 然后 覆盖到doFilter。您可以在此方法中解析jwt令牌和jwt 是有效的,那么你可以得到索赔

列出角色 = Jwts.parser().setSigningKey(secretKey).parseClaimsJws(Jwt).getClaims("roles");

public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
        throws IOException, ServletException {
    try {
        HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
        String jwt = resolveToken(httpServletRequest);
        if (StringUtils.hasText(jwt)) {
            if (this.tokenProvider.validateToken(jwt)) {

            }
        }
        filterChain.doFilter(servletRequest, servletResponse);
    }catch(Exception ex){
        handleException((HttpServletResponse) servletResponse,ex);
    }
}

private String resolveToken(HttpServletRequest request) {
    String bearerToken = request.getHeader(JWTConfigurer.AUTHENTICATION_HEADER);
    if (StringUtils.hasText(bearerToken) && bearerToken.startsWith("Bearer ")) {
        String jwt = bearerToken.substring(7, bearerToken.length());
        return jwt;
    }

    String jwt = request.getParameter(JWTConfigurer.AUTHENTICATION_TOKEN);
    if (StringUtils.hasText(jwt)) {
        return jwt;
    }
    return null;
}

【讨论】:

    猜你喜欢
    • 2017-04-04
    • 2020-11-29
    • 2019-10-14
    • 2012-04-08
    • 2020-05-15
    • 2011-01-01
    • 1970-01-01
    • 2020-07-19
    • 1970-01-01
    相关资源
    最近更新 更多