过滤器Filter
2016-08-04 00:13
246 查看
Filter作用:
对客户端所传递的参数做前置处理,如编码转换。
对用户的权限进行检查,登录验证。
过滤器的生命周期
和Servlet一样,过滤器的生命周期分为四个阶段。
实例化,实现javax.servlet.Filter接口。
读取过滤器的初始化函数,调用init()方法。
完成对请求或过滤的响应,调用doFilter()方法。
销毁过滤器,调用destroy()方法。
1、编码过滤,解决中文乱码问题
2、登录验证,防止未经登录直接访问
Filter在web.xml中的配置
对客户端所传递的参数做前置处理,如编码转换。
对用户的权限进行检查,登录验证。
过滤器的生命周期
和Servlet一样,过滤器的生命周期分为四个阶段。
实例化,实现javax.servlet.Filter接口。
读取过滤器的初始化函数,调用init()方法。
完成对请求或过滤的响应,调用doFilter()方法。
销毁过滤器,调用destroy()方法。
1、编码过滤,解决中文乱码问题
package com.mipo.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.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; //编码过滤 public class EncodingFilter implements Filter { public EncodingFilter() { } //当服务不在使用该filter功能的时候被web容器调用,此后的web请求将不在进行doFilter中的处理。 public void destroy() { } //当客户端请求服务资源或是回复的时候调用该方法进行filter功能处理。 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest)request; HttpServletResponse res = (HttpServletResponse)response; req.setCharacterEncoding("UTF-8"); res.setContentType("text/html;charset=UTF-8"); chain.doFilter(request, response); } //当servlet容器创建该filter实例的时候调用该方法进行初始化设置。 public void init(FilterConfig fConfig) throws ServletException { } }
2、登录验证,防止未经登录直接访问
package com.mipo.filter; import java.io.IOException; import java.util.Arrays; import java.util.List; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; //登录验证 public class LoginFilter implements Filter { public void destroy() { } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest)request; HttpServletResponse res = (HttpServletResponse)response; HttpSession session = req.getSession(); //如果第一次请求不是登录页面,那就对session中内容进行检查;如果是登录页面就不检查,避免造成循环重定向 if(!"login.jsp".equals(req.getContextPath().endsWith("login.jsp"))) { //如果session为null或session中没有登录者的信息,重定向到登录页面 if(null == session || null == session.getAttribute("user")) { res.sendRedirect(req.getContextPath()+"/login.jsp"); //结束运行 return; } } //session中的内容与登录者信息匹配,则继续往下执行 chain.doFilter(req, res); } public void init(FilterConfig fConfig) throws ServletException { } }
Filter在web.xml中的配置
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <display-name>过滤器</display-name> <!-- 先进行编码过滤 --> <servlet> <servlet-name>encoding</servlet-name> <servlet-class>com.mipo.servlet.EncodingFilter</servlet-class> </servlet> <servlet-mapping> <servlet-name>encoding</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> <!-- 再进行登录验证 --> <filter> <filter-name>login</filter-name> <filter-class>com.mipo.filter.LoginFilter</filter-class> </filter> <filter-mapping> <filter-name>login</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
相关文章推荐
- 通过过滤器Filter来完成url访问权限限制
- WordPress插件制作教程(七): 插件函数之过滤器(Filter)函数
- Swift之过滤器(filter)
- 【servlet】初学过滤器Filter
- Android:Intent Filter 过滤器与隐式Intent
- Servlet中的过滤器Filter详解
- 配置字符集过滤器(Filter)
- Servlet Filter(过滤器)----->张国亮总结心得第一季
- SpringMVC的拦截器(Interceptor)和过滤器(Filter)详解
- 拦截器Intercepter和过滤器Filter的比较
- JAVA入门[15]-过滤器filter
- Servlet中的过滤器Filter详解
- lucene自定义过滤器Filter
- AngularJs(八) 过滤器filter创建
- JavaWeb之Filter(过滤器)
- java字符编码过滤器EncodingFilter
- Servlet3.0学习总结(二)——使用注解标注过滤器(Filter)
- Java web----过滤器(Filter)
- sphinx SetFilter 单个过滤器最大过滤值数目
- Web中的监听器【Listener】与过滤器【Filter】 实例