Retrieve JWT token from request and send to downstream APIs

Viewed 12

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

}
0 Answers
Related