Filter概念快速入门
1.1、步骤
- 1、创建一个类实现Filter接口
- 2、重写接口中方法(doFilter方法是真正过滤的)
- 3、在web.xml文件中配置
1.2、FilterChain
- 1、FilterChain概念
FilterChain 是 servlet 容器为开发人员提供的对象,它提供了对某一资源的已过滤请求调用链的视图。过滤器使用 FilterChain 调用链中的下一个过滤器,如果调用的过滤器是链中的最后一个过滤器,则调用链末尾的资源。 - 2、形成一个Filter链
只要多个Filter对同一个资源进行拦截就可以形成Filter链 - 3、确定Filter的执行顺序
由来确定
1.3、Filter生命周期
- 1、实例化–初始化–服务–销毁
- 2、当服务器启动,会创建Filter对象,并调用init方法,只调用一次.
- 3、当访问资源时,路径与Filter的拦截路径匹配,会执行Filter中的doFilter方法,这个方法是真正拦截操作的方法.
- 4、当服务器关闭时,会调用Filter的destroy方法来进行销毁操作
1.4、FilterConfig
- 1、功能
获取Filtr名称;获取Filter初始化参数;获取ServletContext对象。 - 2、位置
在Filter的init方法上有一个参数,类型就是FilterConfig. - 3、Filter中获取一个FIlterConfig对象
public class implements Filter{
private FilterConfig filterConfig;
public void init(FilterConfig filterConfig) throws ServletException{
this.filterConfig=filterConfig;
}
}
1.5、Filter配置
<filter>
<filter-name>filter名称</filter-name>
<filter-class>Filter类的包名.类名</filter-class>
</filter>
<filter-mapping>
<filter-name>filter名称</filter-name>
<url-pattern>路径</url-pattern>
</filter-mapping>
1.6、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;
public class CodeFilter implements Filter{
private FilterConfig filterConfig;
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req=(HttpServletRequest) request;
HttpServletResponse resp=(HttpServletResponse) response;
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
chain.doFilter(req,resp);
}
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig=filterConfig;
}
}
1.7、Filter用户权限
package com.san.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 com.san.model.User;
public class UserFilter implements Filter{
public void destroy() {
}
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest request=(HttpServletRequest) req;
HttpServletResponse response=(HttpServletResponse) resp;
User user=(User) request.getSession().getAttribute("user");
if(user!=null){
if(0==user.getUserType()){
response.getWriter().write("权限不足,无法访问!");
response.setHeader("refresh","2;url=../index.jsp");
return ;
}else{
chain.doFilter(request, response);
return ;
}
}else{
response.sendRedirect("../login.jsp");
return ;
}
}
public void init(FilterConfig arg0) throws ServletException {
}
}