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