I am trying to retrieve the JWT token that comes to our service and pass it to downstream services using filter and interceptor as below but the bean passed between them , of sessionscope is coming up as null in the interceptor. How do I fix this? Any thoughts?
BaseConfiguration.java
@Configuration
public class BaseConfiguration {
@Bean
FilterRegistrationBean<RequestHeaderFilter> requestFilter(RequestHeaderFilter requestFilter){
var registration = new FilterRegistrationBean<RequestHeaderFilter>();
registration.setFilter("requestFilter");
registration.addUrlPatterns("/*");
registration.setName("requestFilter");
registration.setOrder(1);
return registration;
}
@Bean
@RequestScope
JwtTokenData jwtTokenData(){
return new JWTTokenData();
}
@Bean
RestTemplate restTemplate(){
var restTemplate = new RestTemplate();
restTemplate.getInterceptors().add(new RestTemplateInterceptor());
return restTemplate;
}
}
JwtTokenData.java
public class JwtTokenData {
private String token;
public String getToken(){
return token;
}
public void setToken(String token){
this.token = token;
}
}
RequestHeaderFilter.java to intercept all incoming calls and populate the JWT token -
@Component
public class RequestHeaderFilter implements Filter {
@Autowired
private JWTTokenData jwtTokenData;
@override
poublic void dofilter (ServletRequest request, ServletResponse response. FilterChain chain) throws IOException, ServletException {
var httpRequest = (HttpServletRequest) request;
String token = httpServletRequest.getHeader("X-authJWT");
if(StringUtils.isempty(token)){
throw new IllegalArgumentException("Can't retrieve JWT Token");
}
jwtTokenData.setToken(token);
chain.doFilter(request,response);
}
}
RestTemplateInterceptor.java to send the jwtToken to downstream services -
public class RestTemplateInterceptor implements ClientHttpRequestInterceptor {
@Autowired
private JwtTokenData jwtTokenData;
@override
public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException {
String token = jwtTokenData.getToken();
request.getHeaders().add("X-AuthJwt");
return execution.execute(request,body);
}
}