1、什么是Filter
Filter可认为是Servlet的一种特殊用法,主要是对用户发起的请求进行预处理或后处理,意思就是在请求到达用户想请求的地址之前先进入Filter,或者在离开用户请求之后进入Filter。Filter类似于门卫,你在进入之前门卫需要盘查你,身份合法进入,身份不合法拦截。
1.1、Filter过滤器的使用场景
1、对用户的请求进行统一认证,适合做权限管理。
2、对请求和响应进行加密处理。
3、对用户发送的请求或者响应的数据进行过滤处理。
4、对所有用户的请求或者响应进行记录,可以进行日志管理。
2、Filter的使用方式
说明1:Filter的使用需要实现Filter接口,并重写doFilter方法
说明2:导包信息import javax.servlet.Filter;
说明3:当用户正在进行登录的时候需要放行。
2.1、创建Filter
public class LoginFilter implements Filter{
//销毁方法
public void destroy() {
}
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
throws IOException, ServletException {
//将ServletRequest转化成HttpServletRequest
HttpServletRequest request=(HttpServletRequest)servletRequest;
HttpServletResponse response=(HttpServletResponse)servletResponse;
//获取当前用户的请求地址
String url=request.getRequestURI();
//如果请求的地址中包含login,就放行
//如果用户正在通过login.jsp或者请求login.do进行登录,要放行。
if(url.indexOf("login")>-1){
//放行
filterChain.doFilter(request, response);
return ;
}
HttpSession session=request.getSession();
String username=(String)session.getAttribute("username");
//如果username值为空,说明没有登录,因为登录成功后会将用户信息保存在session中。
if(username!=null){
//放行
filterChain.doFilter(request, response);
return ;
}
//如果没有登录转发到login.jsp
request.getRequestDispatcher("login.jsp").forward(request, response);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
2.2、在web.xml中配置Filter信息
<!-- 自定义过滤器 -->
<filter>
<filter-name> LoginFilter </filter-name>
<filter-class>com.it.filter. LoginFilter </filter-class>
</filter>
<filter-mapping>
<filter-name> LoginFilter </filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>