咚呿舂來 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日

悬赏问题

  • ¥170 如图所示配置eNSP
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥15 键盘指令混乱情况下的启动盘系统重装