参考:https://blog.csdn.net/yuzhiqiang_1993/article/details/81288912

原理:

一般实现流程:

1、新建一个类,实现Filter接口
2、实现doFilter()方法,打印一句话,来证明能够进行拦截
3、在web.xml中进行配置(参照Servlet配置)
4、访问一个页面,看看能不能拦截

1、Filter实现类

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; public class UserFilter implements Filter { @Override
public void destroy() {
// TODO Auto-generated method stub } @Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
} @Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// 获取session对象,判断是否登录
HttpServletRequest req=(HttpServletRequest)request;
HttpServletResponse res=(HttpServletResponse)response;
HttpSession session = req.getSession();
if(session.getAttribute("user")==null){
// 非法访问,没有登录,跳转到登录页面
session.setAttribute("error","非法访问");
// 保存客户想要去的地址, 登录成功后则直接跳转,而不是到首页
// 获取请求的地址, 包括工程名,但是不包括参数
System.out.println(req.getRequestURI());
// 获取请求的参数
System.out.println("参数:" + req.getQueryString());
// 获取当前项目的绝对路径,方法已过时,不推荐使用 推荐使用 request.getServletContext().getRealPath("")
System.out.println(req.getRealPath(""));
// 获取请求的地址, 但是不包括工程名和参数
System.out.println(req.getServletPath());
// 此方法需要在servlet 3.0的版本上使用, 开发的环境需要J2EE6 运行需要Tomcate7.0
//System.out.println("request.getServletContext().getRealPath:" +request.getServletContext().getRealPath(""));
String goURL=req.getServletPath();
if(req.getQueryString()!=null){
goURL += "?" + req.getQueryString();
}
System.out.println(goURL);
session.setAttribute("goURL", goURL);
res.sendRedirect(req.getContextPath() + "/login.jsp");
System.out.println(req.getContextPath());
}else{
// 如果有下一个过滤器则跳转到下一个过滤器否则目标页面
chain.doFilter(request, response);
}
}
}
session.setAttribute("error","非法访问")可以用对象取代,如:
request.getSession().setAttribute("humanSession", human对象);

2、web.xml配置

<filter>
<filter-name>userFilter</filter-name>
<filter-class>
cn.***.UserFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>userFilter</filter-name>
<url-pattern>/user/*</url-pattern><br>    <dispatcher>REQUEST</dispatcher> <!-- 没有配置dispatcher就是默认request方式的 -->
  <dispatcher>FORWARD</dispatcher>
  <dispatcher>ERROR</dispatcher>
  <dispatcher>INCLUDE</dispatcher>
</filter-mapping>

最新文章

  1. canvas变幻曲线
  2. [WCF编程]13.并发:服务并发模式
  3. Arch Linux 安装博通 BCM4360 驱动(Arch Linux, Ubuntu, Debian, Fedora...)
  4. kindeditor多图片上传找不到action原来是private File upload成员变量惹得祸
  5. PyMySQL Evaluation
  6. ACM Coder [T1002] 一直wrong answer,不知道为什么。上代码!就对就对!
  7. 【BZOJ】1082: [SCOI2005]栅栏(二分+dfs)
  8. php和java的一些比较
  9. Spring 中jdbcTemplate 实现执行多条sql语句
  10. BZOJ 1020 安全的航线flight
  11. Android 开发中eclipse 下 DDMS 视图中 sdcard 中文件导入的处理
  12. 【读书笔记】《未来闪影》罗伯特&#183;J&#183;索耶
  13. Eratosthenes,筛法求素数
  14. Uva 01124, POJ 3062 Celebrity jeopardy
  15. C#与Excel的交互示例
  16. Linux 小知识翻译 - 「协议(protocol)」
  17. li直接1px 像素的原因
  18. fengsuo
  19. leetcode题库解答源码(python3)
  20. NC 6系分配组织方法

热门文章

  1. redis主从复制原理与优化-高可用
  2. XML--XML概览
  3. 委托、Action、Func使用
  4. UVA-101 The Blocks Problem 栈模拟
  5. 干货 | 基于Go SDK操作京东云对象存储OSS的入门指南
  6. 从Evernote大批顶尖高管离职,看处于漩涡中的笔记应用未来前景
  7. 【系统安装】如何在VMware软件中安装ghost格式的系统
  8. runlevel 运行级别
  9. python+Sqlite+Dataframe打造金融股票数据结构
  10. 干货 | 调用AI api 实现网页文字朗读