Spring 4升级Spring 5后修改密码页面404错误排查求助
Spring 5升级后密码过期跳转改密码页面404排查方案
1. 检查视图解析器配置
确保InternalResourceViewResolver的前缀和后缀配置与JSP路径匹配:
@Bean public InternalResourceViewResolver viewResolver() { InternalResourceViewResolver resolver = new InternalResourceViewResolver(); resolver.setPrefix("/WEB-INF/jsp/"); // 对应JSP所在父路径 resolver.setSuffix(".jsp"); return resolver; }
控制器返回的逻辑视图名需为public/change-password/change-password,才能正确解析到目标JSP路径,注意路径层级不能多写或少写。
2. 验证控制器请求映射
确认改密码页面的控制器映射与跳转URL完全匹配:
@Controller @RequestMapping("/public/change-password") public class ChangePasswordController { @GetMapping public String showChangePasswordPage() { return "public/change-password/change-password"; } }
- 检查跳转目标URL(如
/public/change-password)与控制器映射路径一致,无拼写错误。 - Spring 5默认路径匹配区分大小写,若部署在Linux环境,需确保URL与映射的大小写完全一致。
3. 检查Spring Security拦截规则
密码过期时用户处于未完全认证状态,需放行改密码路径:
@Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/public/change-password/**").permitAll() // 允许匿名访问改密码路径 .anyRequest().authenticated() .formLogin() .loginPage("/login") .permitAll() .and() .exceptionHandling() .authenticationEntryPoint(new CustomAuthenticationEntryPoint()); // 自定义入口点需确保跳转URL正确 }
若密码过期跳转逻辑在AuthenticationSuccessHandler或AuthenticationFailureHandler中实现,需确认跳转URL拼写正确且未被拦截。
4. 排查路径匹配策略变化
Spring 5.3+默认使用PathPatternParser替代AntPathMatcher,部分匹配规则有差异:
- 若依赖旧匹配器的特殊规则(如
**的使用),可手动切换:
@Configuration public class WebMvcConfig implements WebMvcConfigurer { @Override public void configurePathMatch(PathMatchConfigurer configurer) { configurer.setPathMatcher(new AntPathMatcher()); } }
- 确保URL中斜杠处理正确,避免多余或缺失斜杠导致匹配失败。
5. 验证JSP路径与容器配置
- 确认JSP文件实际路径与
/application/src/main/webapp/WEB-INF/jsp/public/change-password/change-password.jsp完全一致,无文件夹或文件名拼写错误。 - 检查
web.xml中DispatcherServlet的url-pattern配置,需使用/而非/*,否则会拦截JSP请求导致容器无法解析:
<servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
内容的提问来源于stack exchange,提问作者dynamo
相关产品推荐
相关产品推荐

