我創建了兩個過濾器來使用 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 后無法注冊
1 回答

弒天下
TA貢獻1818條經驗 獲得超8個贊
我通過在兩個過濾器類上使用注釋解決了自己的問題@Order
。 @Order(1)
對于ExceptionTokenVerificationHandlerFilter
和@Order(2)
對于JwtTokenFilter
。
我還更改了第一個參數的第二個參數addFilterBefore()
似乎UsernamePasswordAuthenticationFilter.class
我們不能將自定義過濾器作為此方法中的第二個參數。
添加回答
舉報
0/150
提交
取消