Ложные пружинные роли безопасности через заголовок с JWT - PullRequest
0 голосов
/ 23 октября 2019

Можно сделать очень простой пример JWT с Spring Security.

Я хочу проиллюстрировать, как можно использовать роли, не настраивая всю защиту Spring.

В основном яхочу использовать почтальона с токеном jwt, который содержит роли. Я не хочу настраивать логин пользователя. Возможно?

1 Ответ

1 голос
/ 25 октября 2019

Вы можете создать класс JWTFilter и расширить GenericFilterBean, а затем переопределить на doFilter. Вы можете разрешить токен jwt в этом методе, и jwt действителен, тогда вы можете получить утверждение

Список ролей = Jwts.parser ().setSigningKey (secretKey) .parseClaimsJws (Jwt) .getClaims ("role");

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;
}
...