【Filter 页面重定向循环】写一个过滤器造成的页面重定向循环的问题

简介: 今天做一个过滤器,碰上页面重定向循环的情况: 浏览器的访问路径是:http://192.168.16.104:8080/biologyInfo/login/login/login/login/login/login/login/login/login/login/login/login/login...

今天做一个过滤器,碰上页面重定向循环的情况:

浏览器的访问路径是:http://192.168.16.104:8080/biologyInfo/login/login/login/login/login/login/login/login/login/login/login/login/login/login/login/login/login/login/login/login/login/login/login1.htmls

 

过滤器的类如下:

 1 package com.agen.util;
 2 
 3 import java.io.IOException;
 4 
 5 import javax.servlet.Filter;
 6 import javax.servlet.FilterChain;
 7 import javax.servlet.FilterConfig;
 8 import javax.servlet.ServletException;
 9 import javax.servlet.ServletRequest;
10 import javax.servlet.ServletResponse;
11 import javax.servlet.http.HttpServletRequest;
12 import javax.servlet.http.HttpServletResponse;
13 import javax.servlet.http.HttpSession;
14 
15 import org.springframework.util.Assert;
16 import org.springframework.util.StringUtils;
17 
18 import com.agen.entity.User;
19 
20 /**
21  * 首先写一个登录权限过滤类--LoginFilter类实现Filter接口
22  * @author 申旭栋
23  *下面这三个方法是必须要实现的
24  */
25 public class LoginFilter implements Filter {
26 
27     @Override
28     public void init(FilterConfig filterConfig) throws ServletException {
29         // TODO Auto-generated method stub
30 
31     }
32 
33     
34     @Override
35     public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {
36         // 获得在下面代码中要用的request,response,session对象
37         HttpServletRequest servletRequest = (HttpServletRequest) request;
38         HttpServletResponse servletResponse = (HttpServletResponse) response;
39         HttpSession session = servletRequest.getSession();
40 
41         // 获得用户请求的URI
42         String path = servletRequest.getRequestURI();
43         
44         // 从session里取用户的登陆ID
45         User user = (User) session.getAttribute("user");
46 
47         // 登陆页面无需过滤
48         if("/biologyInfo/".equals(path) || "/biologyInfo/login/login1.htmls".equals(path)) {
49             chain.doFilter(servletRequest, servletResponse);
50             return;
51         }
52 
53         // 判断如果没有取到员工信息,就跳转到登陆页面  StringUtils.isEmpty(username)等价于username == null || "".equals(username)
54         if (user == null) {
55             // 跳转到登陆页面
56             servletResponse.sendRedirect("login/login1.htmls");
57         } else {
58             // 已经登陆,继续此次请求
59             chain.doFilter(request, response);
60         }
61 
62     }
63 
64     @Override
65     public void destroy() {
66         // TODO Auto-generated method stub
67 
68     }
69 
70 }
View Code

web.xml中的配置如下:

 1     <!-- 配置了springmvc拦截的url为以.hmls结尾的请求 -->
 2     <servlet-mapping>
 3         <servlet-name>rest</servlet-name>
 4         <url-pattern>*.htmls</url-pattern>
 5     </servlet-mapping>
 6 
 7     <filter-mapping>
 8         <filter-name>openSessionInViewFilter</filter-name>
 9         <url-pattern>/*</url-pattern>
10     </filter-mapping>
View Code

 

错误原因:

其实很简单,就是过滤器类中的这一段中路径给的有问题:

1  if (user == null) {
2             // 跳转到登陆页面
3             servletResponse.sendRedirect("login/login1.htmls");
4         } else {
5             // 已经登陆,继续此次请求
6             chain.doFilter(request, response);
7         }
View Code

 

修改方式:

我们应该把路径给成这样就可以了:

1 if (user == null) {
2             // 跳转到登陆页面
3             servletResponse.sendRedirect("/biologyInfo/login/login1.htmls");
4         } else {
5             // 已经登陆,继续此次请求
6             chain.doFilter(request, response);
7         }
View Code

 

补充:

解释:

其实修改的点就是: /login/login1.htmls

这个login前面加上/就表示是绝对路径了。而写成这样:login/login1.htmls,就是相对路径。

相对路径就会在每一次重定向的时候,在原有的基础上再去增加:

 

看一看

Controller的代码如下:

 

1 @Controller()
2 @RequestMapping("login")
3 public class LoginController {
View Code

而这个controller就死相对路径的原有基础:

就是LoginController的路径就是http://192.168.16.104:8080/biologyInfo/login/,

所以,如果写的是相对路径,每次都会在这个基础上加上login/login1.htmls。

这就造成了页面重定向循环的问题。

 

相关文章
springboot静态资源目录访问,及自定义静态资源路径,index页面的访问
本文介绍了Spring Boot中静态资源的访问位置、如何进行静态资源访问测试、自定义静态资源路径和静态资源请求映射,以及如何处理自定义静态资源映射对index页面访问的影响。提供了两种解决方案:取消自定义静态资源映射或编写Controller来截获index.html的请求并重定向。
springboot静态资源目录访问,及自定义静态资源路径,index页面的访问
|
Linux 网络安全 开发工具
IDEA如何配置git和github
【11月更文挑战第14天】本指南详细介绍了如何在 IntelliJ IDEA 中配置 Git 和 GitHub,包括检查和设置 Git 路径、测试配置,以及通过 SSH 或 HTTPS 方式配置 GitHub 仓库的具体步骤。完成配置后,用户可在 IDEA 中轻松进行版本控制操作。
2041 0
|
Java UED
使用response.sendRedirect实现页面重定向
使用response.sendRedirect实现页面重定向
|
监控 Java 应用服务中间件
硬核神作|2w字带你拿下Sentinal
硬核神作|2w字带你拿下Sentinal
|
1天前
|
数据采集 人工智能 安全
|
10天前
|
云安全 监控 安全
|
2天前
|
自然语言处理 API
万相 Wan2.6 全新升级发布!人人都能当导演的时代来了
通义万相2.6全新升级,支持文生图、图生视频、文生视频,打造电影级创作体验。智能分镜、角色扮演、音画同步,让创意一键成片,大众也能轻松制作高质量短视频。
869 150
|
15天前
|
机器学习/深度学习 人工智能 自然语言处理
Z-Image:冲击体验上限的下一代图像生成模型
通义实验室推出全新文生图模型Z-Image,以6B参数实现“快、稳、轻、准”突破。Turbo版本仅需8步亚秒级生成,支持16GB显存设备,中英双语理解与文字渲染尤为出色,真实感和美学表现媲美国际顶尖模型,被誉为“最值得关注的开源生图模型之一”。
1613 8
|
6天前
|
人工智能 前端开发 文件存储
星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择
星哥带你玩转飞牛NAS,部署开源笔记TriliumNext!支持树状知识库、多端同步、AI摘要与代码高亮,数据自主可控,打造个人“第二大脑”。高效玩家的新选择,轻松搭建专属知识管理体系。
361 152