Spring Boot中Circular view path [login]错误排查与解决咨询
循环视图路径错误排查与解决方案
错误原因
Circular view path [login] 核心问题是:DispatcherServlet解析视图名login时,找不到对应的物理JSP文件,默认将视图名当作请求路径转发,导致再次触发/login请求,形成循环调用。
逐步排查与解决
1. 补全JSP依赖
Spring Boot默认不内置JSP支持,必须手动添加依赖:
- Maven(pom.xml):
<dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> </dependency>
- Gradle(build.gradle):
implementation 'javax.servlet:jstl' providedRuntime 'org.apache.tomcat.embed:tomcat-embed-jasper'
2. 配置视图解析器参数
在application.properties或application.yml中设置JSP文件的前缀和后缀,要和文件实际位置对应:
# application.properties spring.mvc.view.prefix=/WEB-INF/jsp/ spring.mvc.view.suffix=.jsp
比如你的login.jsp放在src/main/webapp/WEB-INF/jsp/目录下,上述配置可正确定位文件;若文件位置不同,调整前缀路径即可。
3. 修正LoginController写法
- 必须用
@Controller注解,不能用@RestController(后者会把返回值直接输出为JSON,不会解析视图)。 - 方法返回纯视图名,不要加额外路径:
@Controller public class LoginController { @GetMapping("/login") public String showLoginPage() { return "login"; // 对应前缀+login+后缀的JSP路径 } }
4. 调整WebSecurityConfig拦截规则
确保Spring Security不拦截JSP文件和登录页请求:
@Configuration @EnableWebSecurity public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/WEB-INF/jsp/**").permitAll() // 允许访问JSP目录 .anyRequest().authenticated() .and() .formLogin() .loginPage("/login") // 与Controller映射URL一致 .permitAll(); } }
5. 确认项目结构与打包方式
- JSP文件必须放在
src/main/webapp/目录下,仅WAR打包支持该目录;如果是JAR打包,Spring Boot不支持JSP,需改成WAR打包(pom.xml中设置<packaging>war</packaging>),或替换为Thymeleaf等支持JAR的模板引擎。
内容的提问来源于stack exchange,提问作者Ganiel24
相关产品推荐
相关产品推荐

