博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Filter 页面重定向循环】写一个过滤器造成的页面重定向循环的问题
阅读量:5768 次
发布时间:2019-06-18

本文共 3608 字,大约阅读时间需要 12 分钟。

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

浏览器的访问路径是: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     @Override28     public void init(FilterConfig filterConfig) throws ServletException {29         // TODO Auto-generated method stub30 31     }32 33     34     @Override35     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         // 获得用户请求的URI42         String path = servletRequest.getRequestURI();43         44         // 从session里取用户的登陆ID45         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     @Override65     public void destroy() {66         // TODO Auto-generated method stub67 68     }69 70 }
View Code

web.xml中的配置如下:

1     
2
3
rest
4
*.htmls
5
6 7
8
openSessionInViewFilter
9
/*
10
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。

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

 

转载于:https://www.cnblogs.com/sxdcgaq8080/p/5714929.html

你可能感兴趣的文章
敏捷开发与Scrum
查看>>
网络驱动移植之解析Linux网络驱动的基本框架
查看>>
GROUP BY 和 GROUP_CONCAT的使用
查看>>
PHP团队 编码规范 & 代码样式风格规范
查看>>
Docker学习笔记 - Docker Compose
查看>>
数据、事实、实体、值对象、事务、不变性
查看>>
php里面的编码问题
查看>>
RESTful API浅谈
查看>>
熵与知识树
查看>>
Android逆向-java代码基础
查看>>
Serializable中的serialVersionUID到底有啥用
查看>>
x265探索与研究(四):怎样编码视频?
查看>>
mysql变量
查看>>
【算法】赫夫曼树(Huffman)的构建和应用(编码、译码)
查看>>
UICollectionView使用方法补充(照片轮播墙)
查看>>
关于有默认值的字段在用EF做插入操作时的思考(续)
查看>>
柬埔寨旅游小结
查看>>
php实现图形计算器
查看>>
Python使用openpyxl读写excel文件
查看>>
android系统又一次刷ROM简记(一)
查看>>