过滤器
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.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;public class MyFilter extends HttpServlet implements Filter {
    private FilterConfig filterConfig;
    public void init(FilterConfig filterConfig) throws ServletException {
        this.filterConfig = filterConfig;
    }    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain ){
     HttpServletRequest httpreq = (HttpServletRequest) request;
        HttpServletResponse httpres = (HttpServletResponse) response;
        try {
         System.out.print("经过过滤器..");
         HttpSession session=httpreq.getSession();
         if(session.getAttribute("userinfo")==null){
         System.out.println(session.getAttribute("userinfo"));
         String noLogin=filterConfig.getInitParameter("noLogin");
         httpres.sendRedirect(noLogin);
         System.out.println("经过了");
         }else{
         chain.doFilter(httpreq, httpres);
         }
               
        } catch (ServletException sx) {
            filterConfig.getServletContext().log(sx.getMessage());
        } catch (IOException iox) {
            filterConfig.getServletContext().log(iox.getMessage());
        }
    }    public void destroy() {
    }

}
web.xml
<filter>
<filter-name>myfilter</filter-name>
<filter-class>filter.MyFilter</filter-class>
<init-param>
             <param-name>noLogin</param-name>
             <param-value>./login.jsp</param-value> <!--没有登录跳转的页面-->
         </init-param>
</filter>
<filter-mapping>
<filter-name>myfilter</filter-name>
<url-pattern>/form/*</url-pattern>
</filter-mapping>当我经过登陆页面时,过滤器就不停的过滤,
不晓得是怎么回事情,请哪位高手给我看哈

解决方案 »

  1.   

    <url-pattern>/form/* </url-pattern>这句代码应该写成.do的请求吧,意思是过滤所有.do的请求。应该改为:<url-pattern>*.do</url-pattern>。
    <init-param> 
           <param-name>noLogin </param-name> 
           <param-value>./login.jsp </param-value> <!--没有登录跳转的页面--> 
    </init-param> 
    这句初始化过滤页面,不需要写了吧?
      

  2.   

    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;import org.apache.struts.action.RequestProcessor;public class FilterUser {
    public class CustomRequestProcessor    extends RequestProcessor {    //自定义的processPreprocess()方法,检查用户是否已经登录    protected boolean processPreprocess (        HttpServletRequest request,        HttpServletResponse response) {        HttpSession session = request.getSession(false);       //如果用户请求的是登录页面则不需要检查        if(request.getServletPath().indexOf("CompanyUser.do?fun=add")>0||request.getServletPath().indexOf("user.do?fun=addUserInfo")>0||request.getServletPath().indexOf("user.do?fun=login")>0)
                return true;        //检查session中是否存在userName属性,如果存在则表示拥护已经登录        if( session != null &&        session.getAttribute("userinfo") != null)            return true;        else{            try{                //用户未登录则重定向到登录页面
                 response.sendRedirect("./login.jsp");            }catch(Exception ex){            }        }        return false;    }  
    }
    }这个才是过滤.do的请求,并不是所有的都过滤,而且不过滤注册,还有登陆的.do
    我只过滤后台的,所以我是这样写的
    <controller processorClass="filter.FilterUser">
    </controller>