论坛首页 入门技术论坛

filter拦截器设置

浏览 3825 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-04-20  

filter 和 struts2拦截器的比较

比较一,filter基于回调函数,我们需要实现的filter接口中doFilter方法就是回调函数,而interceptor则基于java本身的反射机制,这是两者最本质的区别。
 比较二,filter是依赖于servlet容器的,即只能在servlet容器中执行,很显然没有servlet容器就无法来回调doFilter方法。而interceptor与servlet容器无关。
 比较三,Filter的过滤范围比Interceptor大,Filter除了过滤请求外通过通配符可以保护页面,图片,文件等等,而Interceptor只能过滤请求。
 比较四,Filter的过滤例外一般是在加载的时候在init方法声明,而Interceptor可以通过在xml声明是guest请求还是user请求来辨别是否过滤

 

 

 Servlet过滤器的基本原理
在Servlet作为过滤器使用时,它可以对客户的请求进行处理。处理完成后,它会交给下一个过滤器处理,这样,客户的请求在过滤链里逐个处理,直到请求发送到目标为止。例如,某网站里有提交“修改的注册信息”的网页,当用户填写完修改信息并提交后,服务器在进行处理时需要做两项工作:判断客户端的会话是否有效;对提交的数据进行统一编码。这两项工作可以在由两个过滤器组成的过滤链里进行处理。当过滤器处理成功后,把提交的数据发送到最终目标;如果过滤器处理不成功,将把视图派发到指定的错误页面。

 

 

具体实例:

建一个JAVA 类

package Interceptor;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class LoginCheckFilter implements Filter {
 private  String loginPage="";
 
 public void destroy() {
  // TODO Auto-generated method stub

 }
 public void doFilter(ServletRequest request, ServletResponse response,
   FilterChain chain) throws IOException, ServletException {
  
  HttpServletRequest httpServletRequest=(HttpServletRequest)request;
   
   String url=httpServletRequest.getServletPath();

//如果用户是登陆的ACTION 则要放行~~ 不做拦截
   if(url.indexOf("login.jsp")>=0 ||url.indexOf("loginAction.action")>=0)
   {
    chain.doFilter(request, response);
   }
    else
   {
     HttpSession session = httpServletRequest.getSession();
     //判断用户session是否过期或是否登录
           if (session!= null&&session.getAttribute("user")!=null)
           {
            chain.doFilter(request, response);
           }
           else
           {
            //转向登录页面
            RequestDispatcher rd=request.getRequestDispatcher(loginPage);
            rd.forward(request, response);
           }
   }
   }

  public void init(FilterConfig filterConfig) throws ServletException
  {
   this.loginPage=filterConfig.getInitParameter("loginPage");
  }
 

}
 

WEB.XML 里添加

 

<!-- FILTER 过滤器 -->
<filter>
  <filter-name>LoginCheckFilter</filter-name>
  <filter-class>
   Interceptor.LoginCheckFilter
  </filter-class>
  <init-param>
   <param-name>loginPage</param-name>
   <param-value>/login.jsp</param-value>
  </init-param>
 </filter>
 <filter-mapping>
  <filter-name>LoginCheckFilter</filter-name>
  <url-pattern>*.jsp</url-pattern>
 </filter-mapping>
 <filter-mapping>
  <filter-name>LoginCheckFilter</filter-name>
  <url-pattern>*.action</url-pattern>
 </filter-mapping>

这里也可以设置其他的文件格式,比如 jpg   xml等等

论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics