在 Spring Security 过滤器链中添加嵌套的自定义过滤器

我创建了两个过滤器来使用 JWT 令牌执行身份验证。我想在第一个中处理 JWT 异常:exceptionTokenVerificationHandlerFilter 并检查第二个中是否一切正常:jwtTokenFilter。如果身份验证因到期日期而失败,则过程返回到第一个过滤器并向前端发送一个响应,其中包含访问被拒绝的消息。

Web安全配置

    @Override

    protected void configure(HttpSecurity http) throws Exception {

        http

            .httpBasic().disable()

            .addFilterBefore(exceptionTokenVerificationHandlerFilter, JwtTokenFilter.class)

            .addFilterBefore(jwtTokenFilter, UsernamePasswordAuthenticationFilter.class)

            .sessionManagement()

            .sessionCreationPolicy(SessionCreationPolicy.STATELESS)

                .and()

            .cors().and()

            .csrf().disable()

            .authorizeRequests() // .antMatchers("/**")

                .antMatchers("/login/**", "/register/**").permitAll()

                .antMatchers("/admin/**").hasRole("ADMIN")      

                .anyRequest().authenticated()

                .and()

            //.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());

            .addFilterAt(customUsernamePasswordAuthenticationFilter, UsernamePasswordAuthenticationFilter.class)    

            /*.formLogin()

                .loginPage("http://localhost:4200/login")//.failureUrl("/login-error")

                .loginProcessingUrl("/login") 

                .usernameParameter("email")

                .successHandler(customAuthenticationSuccessHandler)

                .and()*/

            .logout() 

                .permitAll();

    }    

那么我可以在过滤器链中一个接一个地添加两个自定义过滤器吗?

我现在从编译器收到以下错误消息:

Caused by: java.lang.IllegalArgumentException: 在未注册过滤器类 app.shellx.security.JwtTokenFilter 后无法注册


慕哥6287543
浏览 160回答 1
1回答

弑天下

我通过在两个过滤器类上使用注释解决了自己的问题@Order。 @Order(1)对于ExceptionTokenVerificationHandlerFilter和@Order(2)对于JwtTokenFilter。我还更改了第一个参数的第二个参数addFilterBefore()似乎UsernamePasswordAuthenticationFilter.class 我们不能将自定义过滤器作为此方法中的第二个参数。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java