我已经完成了任务,创建了一个自定义过滤器
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);}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)