Filter类其实也是servlet,它的作用是客户端请求到达时未达到servlet处理前拦截请求,可以对HttpServletRequest进行预处理,然后再把请求转交给后续的servlet处理;它也可会HttpServletResponse返回客户端前进行后处理。
Filter的通常用法:
1.用户授权判断,当用户请求达到时,验证用户是否已通过登录授权。
2.日志记录处理,记录用户特殊用户请求。
3.解码处理,负责对请求的内容统一进行解码。
Filter类需要实现javax.servlet.Filter接口,该接口有3个方法:init()、doFilter()、destroy()。
Filter的配置:
1.可以使用注释方式,在filter类前使用@WebFilter注释,filterName属性指定filter名称,urlPatterns属性指定过滤路径。
2.在web.xml中配置方式
以使用Filter实际用户授权控制实例:
目录结构如下
security目录下的资源需要授权后再能方式
login.jsp为登录页面,为了不引入新技术,没有使用struts,只使用html表单,表单的处理为login_proc.jsp。
login_proc.jsp为登录的处理页面(本应该使用servlet或者MVC框架来处理,为了省事而直接使用jsp页面,jsp其本质也是servlet),当用户名和密码均为admin时表示登录成功。
error.jsp为未授权访问security的提示页面。
firstfilter.java为Filter类,实现security访问授权控制。
security/index.jsp文件内容:
1 <%@ page language="java" contentType="text/html; charset=utf-8" 2 pageEncoding="utf-8"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 7 <title>授权访问首页</title> 8 </head> 9 <body> 10 <% out.println("你好," + session.getAttribute("userName") + "!"); %> 11 </body> 12 </html>