使用Spring Rest模板在服务上传播HTTP标头(JWT令牌)

使用Spring Rest模板在服务上传播HTTP标头(JWT令牌),第1张

使用Spring Rest模板在服务上传播HTTP标头(JWT令牌

我已经完成了任务,创建了一个自定义过滤器

public class RequestFilter implements Filter{    @Override    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {        HttpServletRequest httpServletRequest = (HttpServletRequest) request;        String token = httpServletRequest.getHeader(RequestContext.REQUEST_HEADER_NAME);        if (token == null || "".equals(token)) { throw new IllegalArgumentException("Can't retrieve JWT Token");        }        RequestContext.getContext().setToken(token);        chain.doFilter(request, response);    }    @Override    public void destroy() { }    @Override    public void init(FilterConfig arg0) throws ServletException {}}

然后,在我的配置中进行设置

    @Beanpublic FilterRegistrationBean getPeticionFilter() {    FilterRegistrationBean registration = new FilterRegistrationBean();    registration.setFilter(new RequestFilter());    registration.addUrlPatterns("/*");    registration.setName("requestFilter");    return registration;}

考虑到这一点,我创建了另一个带有ThreadLocal变量的类,以将JWT令牌从Controller传递到Rest Templace拦截器

public class RequestContext {public static final String REQUEST_HEADER_NAME = "Authorization";private static final ThreadLocal<RequestContext> ConTEXT = new ThreadLocal<>();private String token;public static RequestContext getContext() {    RequestContext result = CONTEXT.get();    if (result == null) {        result = new RequestContext();        CONTEXT.set(result);    }    return result;}public String getToken() {    return token;}public void setToken(String token) {    this.token = token;}

}

public class RestTemplateInterceptor implements ClientHttpRequestInterceptor{@Overridepublic ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException {    String token = RequestContext.getContext().getToken();    request.getHeaders().add(RequestContext.REQUEST_HEADER_NAME, token);    return execution.execute(request, body);}}

将拦截器添加到配置

  @PostConstructpublic void addInterceptors() {    List<ClientHttpRequestInterceptor> interceptors = restTemplate.getInterceptors();    interceptors.add(new RestTemplateInterceptor());    restTemplate.setInterceptors(interceptors);}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5013698.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-14
下一篇 2022-11-14

发表评论

登录后才能评论

评论列表(0条)

保存