Java Web Filter(过滤器的使用)

来源:互联网 发布:51电子单片机原理图 编辑:程序博客网 时间:2024/05/29 13:54

</pre>Filter 的学习使用:<p></p><p>首先,一个Filter必须实现javax.servlet.Filter的接口</p><pre name="code" class="java">package 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;public class MyFilter implements Filter {@Overridepublic void destroy() {System.out.println("destroy");}@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {//可以在请求传来的时候,先对请求进行编码的转换,以防出现乱码System.out.println("doFilter<before>");chain.doFilter(request, response);//可以在传回页面的时候进行一些对敏感的词汇进行处理System.out.println("doFilter<after>");}@Overridepublic void init(FilterConfig arg0) throws ServletException {System.out.println("init");}}
</pre><pre name="code" class="java">在web.xml配置一下Filter
<!-- 配置拦截器 -->  <filter>  <filter-name>MyFilter</filter-name>  <filter-class>filter.MyFilter</filter-class>  </filter>  <filter-mapping>  <filter-name>MyFilter</filter-name>  <url-pattern>/*</url-pattern><!-- 对项目下所有的内容进行过滤 -->  </filter-mapping>

应用在登录校验的时候,假设用户需要登录才能进入登录成功的界面,登录失败则进入登录失败的界面

为了防止用户直接在URL栏中直接输入登录成功的界面的地址,就需要用到Filter

在web.xml中配置如下的过滤器

<filter>        <filter-name>LoginFilter</filter-name>        <filter-class>com.imooc.filter.LoginFilter</filter-class>        <init-param>            <param-name>noLoginPaths</param-name>            <param-value>login.jsp;fail.jsp;LoginServlet</param-value>  <!-- 在配置的时候设置一些初始化参数,为了防止这些页面会重定向死循环 -->        </init-param>        <init-param>            <param-name>charset</param-name>            <param-value>UTF-8</param-value>        </init-param>    </filter>    <filter-mapping>        <filter-name>LoginFilter</filter-name>        <url-pattern>/*</url-pattern>    </filter-mapping>

在MyFilter中设置过滤

public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException {HttpServletRequest request = (HttpServletRequest) arg0;HttpServletResponse response = (HttpServletResponse) arg1;HttpSession session = request.getSession();         //这里的强制转换是为了获得request里面的session中的参数信息String noLoginPaths = config.getInitParameter("noLoginPaths");  //这里是获得上面说的防止出现重定向死循环而设置的参数StringString charset = config.getInitParameter("charset");if(charset==null){charset = "UTF-8";}request.setCharacterEncoding(charset);if(noLoginPaths!=null){        //进行这些参数的遍历String[] strArray = noLoginPaths.split(";");   //先用split()方法分割这个字符串for (int i = 0; i < strArray.length; i++) {if(strArray[i]==null || "".equals(strArray[i]))continue;  if(request.getRequestURI().indexOf(strArray[i])!=-1 ){   //如果URI里面<span style="font-family: Arial, Helvetica, sans-serif;">包括这些页面,</span>
arg2.doFilter(arg0, arg1); //<span style="font-family: Arial, Helvetica, sans-serif;">则直接对这些页面进行放行,不用进行下面的判断再进行重定向操作</span>return;}}}if(session.getAttribute("username")!=null){arg2.doFilter(arg0, arg1);}else{response.sendRedirect("login.jsp");}}


1 0