3

I am using spring boot(2.2.0.RELEASE) JWT Authentication using OncePerRequestFilter abstract class.While autowired service class is getting null exception.I tried some ways but still getting same.Can any one help me for that issue.

Code :

@Component
    public class JwtRequestFilter extends OncePerRequestFilter {

        @Autowired
        private JwtUserDetailsService jwtUserDetailsService;
        @Autowired
        private JwtTokenUtil jwtTokenUtil;

        @Override
        protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain)
                throws ServletException, IOException {    
            try {
                final String requestTokenHeader = request.getHeader("Authorization");
                String username = "";
                String jwtToken = "";            
                if (requestTokenHeader != null && requestTokenHeader.startsWith("Bearer ")) {
                    jwtToken = requestTokenHeader.substring(7);
                    try {
                         //here getting null pointer exception
                        username = jwtTokenUtil.getUsernameFromToken(jwtToken);
                        logger.info("username : " + username);
                    } catch (IllegalArgumentException e) {
                        logger.error("Unable to get JWT Token :: " + e.getMessage());                    
                    } catch (ExpiredJwtException e) {
                        logger.error("JWT Token has expired :: " + e.getMessage());                   
                    }
                } else {
                    logger.warn("JWT Token does not begin with Bearer String");
                }
                if (username != null && SecurityContextHolder.getContext().getAuthentication() == null) {
                    UserDetails userDetails = jwtUserDetailsService.loadUserByUsername(username);
                    if (jwtTokenUtil.validateToken(jwtToken, userDetails)) {
                        UsernamePasswordAuthenticationToken usernamePasswordAuthenticationToken = new UsernamePasswordAuthenticationToken(
                                userDetails, null, userDetails.getAuthorities());
                        usernamePasswordAuthenticationToken
                                .setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
                        SecurityContextHolder.getContext().setAuthentication(usernamePasswordAuthenticationToken);
                    }
                }
                chain.doFilter(request, response);
            } catch (Exception e) {
                logger.error("JwtRequestFilter Exception :: " + e.getMessage());            
            }
        }
        }

This below posted code is another class.

 @Service
    @Component
    public class JwtTokenUtil implements Serializable {        
        private static final long serialVersionUID = -2550185165626007488L;                                               
        public String getUsernameFromToken(String token) {
            return getClaimFromToken(token, Claims::getSubject);
        }                       
    }

Exception :

java.lang.NullPointerException
        at com.corenttech.engine.jwt.config.JwtRequestFilter.doFilterInternal(JwtRequestFilter.java:101)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:526)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
        at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:678)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
        at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
        at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
        at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:861)
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1579)
        at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(Thread.java:745)

web.xml This is my web.xml i have configured JwtRequestFilter

<web-app>   
    <filter>
        <filter-name>JwtRequestFilter</filter-name>
        <filter-class>com.demo.engine.jwt.config.JwtRequestFilter
        </filter-class>
    </filter>
    <servlet>
        <servlet-name>DispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <filter-mapping>
        <filter-name>JwtRequestFilter</filter-name>
        <url-pattern>/kb/*</url-pattern>
    </filter-mapping>       
</web-app>
Ajith Deivam
  • 736
  • 4
  • 11
  • 27

0 Answers0