博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Filter过滤器
阅读量:2338 次
发布时间:2019-05-10

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

实现过滤器的步骤:

1、创建普通的java类
2、实现javax.servlet.Filter接口,并实现对应的方法
3、设置web.xml的配置文件

Filter01
com.shsxt.filter.Filter01
Filter01
/s01
Servlet01
chain.doFilter(request,response);	//放行资源

注:在放行资源之前处理request请求,响应会在放行之后执行

过滤器链:

如果有多个过滤器,拦截顺序为web.xml中的配置顺序,谁先配置谁先执行。
放行时,如果有下一个过滤器,会自动放行到下一个过滤器,如果没有则放行到指定资源。

·字符集过滤器:

处理前台传递中文数据给后台,出现乱码问题。

Tomcat8及以上版本								Tomcat7及以下版本 *  * 	POST请求				乱码											乱码 * 						request.setCharacterEncoding("UTF-8");		request.setCharacterEncoding("UTF-8"); * 							new String(request.getParameter(name).getBytes("ISO-8859-1"),"UTF-8"); * 	GET请求				不乱码,不处理									乱码 * 																	new String(request.getParameter(name).getBytes("ISO-8859-1"),"UTF-8");
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain chain) throws IOException, ServletException {				// 基于Http		HttpServletRequest request = (HttpServletRequest) arg0;		HttpServletResponse response = (HttpServletResponse) arg1;				// 处理POST请求		request.setCharacterEncoding("UTF-8");						// ========= GET请求 ========		// 得到请求类型		String method = request.getMethod();		// 判断是否是GET请求		if ("GET".equalsIgnoreCase(method)) {			// 得到服务器的版本信息   			String serverInfo = request.getServletContext().getServerInfo(); // Apache Tomcat/8.0.45   Apache Tomcat/7.0.79			// System.out.println(serverInfo);			// 通过截取,得到具体的版本号			String versionStr = serverInfo.substring(serverInfo.indexOf("/")+1,serverInfo.indexOf("."));			// System.out.println(versionStr);			// 判断服务器的版本是否是Tomcat7以下版本			if (versionStr != null && Integer.parseInt(versionStr) < 8) {				// GET放行  放行的是做好乱码处理的request对象				HttpServletRequest myRequest = new MyWapper(request);				chain.doFilter(myRequest, response);				return;			}		}				// POST请求放行		chain.doFilter(request, response);		return;	}

·非法访问拦截

默认拦截所有资源

什么情况需要拦截:

用户访问一些需要登录成功之后才能访问的资源
什么时候才放行:

1、指定页面,放行(无需登录即可访问的页面,比如登录页面、注册页面等)2、指定资源,放行(静态资源,放行;存放在statics目录下的资源放行)3、指定操作,放行(无需用户登录即可执行的操作,放行;比如登录操作、注册操作等)4、登录状态,放行(session作用域中是否存在指定对象)如果上述情况都不满足,则拦截跳转到登录页面
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain chain) throws IOException, ServletException {				// 基于Http		HttpServletRequest request = (HttpServletRequest) arg0;		HttpServletResponse response = (HttpServletResponse) arg1;				// 得到请求路径		String path = request.getRequestURI(); // 站点名+资源名				// 放行指定页面  (不需要用户登录即可访问页面  登录页面等)		if (path.contains("/login.html")) {			chain.doFilter(request, response);			return;		}				// 放行静态资源   statics目录下的资源 (js、css、images等)		if (path.contains("/statics")) {			chain.doFilter(request, response);			return;		}				// 放行操作放行   (不需要用户登录之后才能执行操作  登录操作、注册操作等)		if (path.contains("/s01")) {			chain.doFilter(request, response);			return;		}						// 获取session对象,判断用户是否登录		String str = (String) request.getSession().getAttribute("user");		if (str != null) {			chain.doFilter(request, response);			return;		}				// 拦截跳转到登录页面		response.sendRedirect("login.html");	}

转载地址:http://efgpb.baihongyu.com/

你可能感兴趣的文章
【java基础】集合框架总结
查看>>
Elasticsearch-基础介绍及索引原理分析
查看>>
【深入理解JVM虚拟机】第7章 虚拟机类的加载机制
查看>>
【C++】二、指针数组与数组指针
查看>>
【C++】三、const与字符串
查看>>
【C++】四、重载,重写,重定义
查看>>
【C++】五、拷贝构造与赋值构造
查看>>
【C++】六、继承与多态
查看>>
特征向量的欧式距离与余弦距离——推荐算法
查看>>
cJSON源码分析3-核心解析算法
查看>>
如何正确使用C中的可变参数
查看>>
SDL2.0-简介
查看>>
SDL2.0-播放YUV文件
查看>>
leetcode 1.TwoSum--hashmap
查看>>
leetcode 14. Longest Common Prefix
查看>>
leetcode 26. Remove Duplicates from Sorted Array
查看>>
leetcode 27. Remove Element
查看>>
leetcode 66. Plus One
查看>>
leetcode 111. Minimum Depth of Binary Tree
查看>>
leetcode 257. Binary Tree Paths
查看>>