Filter也称之为过滤器,它是Servlet技术中最实用的技术,Web开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。
创建一个过滤器,继承于Filter:,实现Filter的三个方法public class LoginFilter implements Filter {
@Override public void init(FilterConfig filterConfig) throws ServletException { //初始化,当前的过滤器对象创建出来的时候,该方法会执行 //一般在该方法中读web.xml中的参数 } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
//在这里请求进行过滤
HttpServletRequest req = (HttpServletRequest) request; HttpSession session = req.getSession(); //从session域中取出登录用户信息 Object user = session.getAttribute("user"); if (user != null){ //对该请求放行 chain.doFilter(request,response); }else { //用户没登录 HttpServletResponse resp = (HttpServletResponse) response; //重定向回登录页面 resp.sendRedirect("/log"); } } @Override public void destroy() { //当前过滤器被销毁的时候被执行 //一般用于释放资源 } }
创建完过滤器必须要在web.xml配置文件进行配置,才能使过滤器生效:
<filter> <filter-name>LoginFilter</filter-name> <filter-class>com.lanou.demo.filter.LoginFilter</filter-class> </filter> <filter-mapping> <filter-name>LoginFilter</filter-name>
<!--设置哪些请求地址会经过该过滤器--> <url-pattern>/category/*</url-pattern> </filter-mapping>
<filter-class>中的名字是上面的过滤器名字;
另外Spring框架中带有一个过滤器,:
<filter> <filter-name>CharsetFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <!--是指过滤的参数类型,可不写--> <init-param> <param-name>encoding</param-name> <param-value>utf-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharsetFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
注意:<filter>标签必须写在servlet标签之前