咚呿舂來 2022-08-15 23:12 采纳率: 50%
浏览 90
已结题

springsecurity替换filter失败

问题遇到的现象和发生背景

springsecurity5.7.1自定义UsernamePasswordAuthenticationFilter未生效

问题相关代码,请勿粘贴截图

通过WebSecurityConfigurerAdapter实现

@Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService);
    }

    @Override
    @Bean
    protected AuthenticationManager authenticationManager() throws Exception {
        return super.authenticationManager();
    }
//LoginFilter extends UsernamePasswordAuthenticationFilter
    @Bean
    public LoginFilter loginFilter() throws Exception {
        LoginFilter filter = new LoginFilter();
        filter.setFilterProcessesUrl("login");
//        filter.setUsernameParameter();
//        filter.setUsernameParameter();
        filter.setAuthenticationManager(authenticationManagerBean());
        filter.setAuthenticationSuccessHandler(new SuccessHandler());
        filter.setAuthenticationFailureHandler(new FailureHandler());
        return filter;
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.addFilterAt(loginFilter(),UsernamePasswordAuthenticationFilter.class);
        http.authorizeRequests()
//                .antMatchers("/login/*").permitAll()
                .anyRequest().authenticated()
                .and().formLogin()//.loginPage("/login/login")
//                .passwordParameter("password")
//                .usernameParameter("username")
                .successHandler(new SuccessHandler())
                .failureHandler(new FailureHandler())
                .and()
                .logout()
//                .logoutRequestMatcher()
                .invalidateHttpSession(true)
                .clearAuthentication(true)
                .logoutSuccessHandler(new LogoutFailureHandler())
                .and().rememberMe()
                .rememberMeServices(rememberMeServices())
                .and().csrf().disable();
    }

上面代码应该没有问题,但不知道为啥,debugger没有走自定义的loginfilter,而是框架原始的UsernamePasswordAuthenticationFilter,configure(HttpSecurity http)第一行就替换了原filter。

运行结果及报错内容

img

img


两个都打了断点,但只在原filter上停止

我的解答思路和尝试过的方法

真的好懵呀,在网上找了好多方法,都是通过addfilterat()方法替换的,但我写的代码好像也没啥问题呀?

  • 写回答

5条回答 默认 最新

  • zjs1201 2022-12-07 18:42
    关注

    因为springsecurity帮我们创建的页面的表单中action仍然是/loign。所以如果自定义的filter修改了路径是拦截不到的。atfiletrat的功能其实不是取代,而是共存,只是我们定义的优先拦截。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 12月16日
  • 已采纳回答 12月8日
  • 创建了问题 8月15日

悬赏问题

  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制