Spring Security配置loginProcessingUrl登录认证时报404错误
这个报错和loginProcessingUrl的配置逻辑无关,核心错误出在WebSecurity的忽略规则配置上:
@Override public void configure(WebSecurity web) throws Exception { web.ignoring().antMatchers("/resources/**", "/static/**", "/static/css/**", "/js/**", "/images/**","/vendor/**","/fonts/**").anyRequest(); }
web.ignoring()的作用是把匹配到的请求完全排除在Spring Security过滤器链之外,你在静态资源匹配规则后面加了.anyRequest(),等于所有请求都不走Security的过滤器处理。
你对loginProcessingUrl的理解是对的:这个路径本来就是Security内置的UsernamePasswordAuthenticationFilter负责拦截处理的,完全不需要手动写Controller映射。现在过滤器链被全局绕开,POST /authenticate的请求直接打到DispatcherServlet找对应的控制器方法,自然会报找不到映射的错。
直接删掉web.ignoring()配置末尾多余的.anyRequest(),只保留静态资源的忽略规则即可,改完的配置:
@Override public void configure(WebSecurity web) throws Exception { web.ignoring().antMatchers("/resources/**", "/static/**", "/static/css/**", "/js/**", "/images/**","/vendor/**","/fonts/**"); }
改完重启应用就能正常处理登录请求了。
你贴的前端登录表单没有问题:POST提交方法、action路径和loginProcessingUrl配置一致、输入框的name属性用的是Security默认识别的username和password,不需要额外调整。
另外注意你贴的SecurityConfig类里,UserService的导入包写的是com.myProject.tournamentproject.service.UserService,但类本身所在包是com.eyanu.tournamentproject.config,如果这不是你贴代码时的笔误,后续可能会报依赖注入错误,到时候把导入路径改成你实际UserService的包路径就行,这个问题和当前的找不到映射报错无关。
内容的提问来源于stack exchange,提问作者iducam

