javaspringjwtservlet-filters

JwtRequestFilter throws Unable to proxy interface-implementing method


Unable to proxy interface-implementing method [public final void org.springframework.web.filter.OncePerRequestFilter.doFilter(jakarta.servlet.ServletRequest,jakarta.servlet.ServletResponse,jakarta.servlet.FilterChain) throws jakarta.servlet.ServletException,java.io.IOException] because it is marked as final, consider using interface-based JDK proxies instead.

Unable to proxy interface-implementing method [public final void org.springframework.web.filter.GenericFilterBean.init(jakarta.servlet.FilterConfig) throws jakarta.servlet.ServletException] because it is marked as final, consider using interface-based JDK proxies instead.

@Component
public class JwtRequestFilter extends OncePerRequestFilter {
@Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain)
    }

@Configuration
@EnableWebSecurity
public class SecurityConfig {

    @Autowired
    private JwtRequestFilter jwtRequestFilter;

   @Bean
    public SecurityFilterChain filterChain(HttpSecurity http)
}

I keep getting the errors above when I start the application. I tried creating constructors and removing the autowired and component annotation, but still the same errors. When I remove the jwtRequestFilter, the application starts. Have you encountered any similar problems? Is there problem with the setup? Or I need to handle some errors?


Solution

  • Remove the @Component or @Service annotation from here:

    public class JwtRequestFilter extends OncePerRequestFilter {
    
        private final MyUserDetailsService userDetailsService;
    
        private final JwtUtil jwtUtil;
    
        public JwtRequestFilter(MyUserDetailsService userDetailsService, JwtUtil jwtUtil) {
            this.userDetailsService = userDetailsService;
            this.jwtUtil = jwtUtil;
        }
    }
    

    In your SecurityConfig:

    @Configuration
    @EnableWebSecurity
    public class SecurityConfig {
    
        private final MyUserDetailsService myUserDetailsService;
        private final JwtUtil jwtUtil;
    
        @Autowired
        public SecurityConfig(MyUserDetailsService myUserDetailsService, JwtUtil jwtUtil) {
            this.myUserDetailsService = myUserDetailsService;
            this.jwtUtil = jwtUtil;
        }
    
        @Bean
        public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
            JwtRequestFilter jwtRequestFilter = new JwtRequestFilter(myUserDetailsService, jwtUtil);
        
    
        // ... remaining code ...
    }