CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  Web 开发

用过滤器做登录校验的问题

楼主askr(ask)2005-06-01 10:51:23 在 Java / Web 开发 提问

网站中任何页面 ,除了登录,全要登录后才可访问,我编写了一个过滤器,但运行首页时,在ie里没有反应,在jb里调试时,发现它反复在执行某2行,奇怪!  
  过滤器:  
  package   filter;  
  import   javax.servlet.*;  
  import   java.io.IOException;  
  import   javax.servlet.http.*;  
  import   com.xdg.address.*;  
  import   javax.servlet.FilterChain;  
  import   javax.servlet.ServletRequest;  
  import   javax.servlet.ServletResponse;  
  import   java.io.IOException;  
  import   javax.servlet.Filter;  
  import   javax.servlet.http.HttpServletRequest;  
  import   javax.servlet.http.HttpServletResponse;  
  import   javax.servlet.ServletException;  
  import   javax.servlet.FilterConfig;  
  import   service.*;  
  public   class   LoginFilter   implements   Filter  
  {  
      String   LOGIN_PAGE="/login.jsp";  
      protected   FilterConfig   filterConfig;  
   
      public   void   doFilter(final   ServletRequest   req,final   ServletResponse   res,FilterChain   chain)throws   IOException,ServletException  
      {  
                        HttpServletRequest   hreq   =   (HttpServletRequest)req;//  
        HttpServletResponse   hres   =   (HttpServletResponse)res;//  
        String   isLog=(String)hreq.getSession().getAttribute("isLog");//以上3行反复执行,执行若干次后,往下,又在下面不断循环。  
  if((isLog!=null)&&((isLog.equals("true"))||(isLog=="true")))//检查是否登录  
                        {  
                                        chain.doFilter(req,res);  
                                        return   ;  
                        }  
                        else  
  //                                       hres.sendRedirect(LOGIN_PAGE);//如果没有登录,把视图派发到登录页面  
                                    MyUtil.forward(LOGIN_PAGE,hreq,hres);  
      }  
   
      public   void   destroy()  
      {  
                      this.filterConfig=null;  
      }  
      public   void   init(FilterConfig   config)  
      {  
                      this.filterConfig=config;  
      }  
      public   void   setFilterConfig(final   FilterConfig   filterConfig)  
      {  
                      this.filterConfig=filterConfig;  
      }  
   
  }  
  web.xml:  
  <filter>  
          <filter-name>login</filter-name>  
          <filter-class>filter.LoginFilter</filter-class>  
          <init-param>  
              <param-name>path</param-name>  
              <param-value>/task4/login.jsp</param-value>  
          </init-param>  
      </filter>  
  <filter-mapping>  
          <filter-name>login</filter-name>  
          <url-pattern>/*</url-pattern>  
      </filter-mapping> 问题点数:20、回复次数:5Top

1 楼askr(ask)回复于 2005-06-01 10:55:24 得分 0

如果在jb里直接运行,就是这样:  
  Apache   Tomcat/4.0.6   -   HTTP   Status   302   -   Moved   Temporarilytype   Status   reportmessage   Moved   Temporarilydescription   The   requested   resource   (Moved   Temporarily)   has   moved   temporarily   to   a   new   locationTop

2 楼ipv(宁静致远)回复于 2005-06-01 11:44:59 得分 20

package   com.ipv.other;  
   
  import   javax.servlet.*;  
  import   javax.servlet.http.HttpServletRequest;  
  import   javax.servlet.http.HttpServletResponse;  
  import   javax.servlet.http.HttpSession;  
  import   java.util.List;  
  import   java.util.ArrayList;  
  import   java.util.StringTokenizer;  
  import   java.io.IOException;  
   
  /**  
    *   用于检测用户是否登陆的过滤器,如果未登录,则重定向到指的登录页面<p>  
    *   配置参数<p>  
    *   checkSessionKey   需检查的在   Session   中保存的关键字<br/>  
    *   redirectURL   如果用户未登录,则重定向到指定的页面,URL不包括   ContextPath<br/>  
    *   notCheckURLList   不做检查的URL列表,以分号分开,并且   URL   中不包括   ContextPath<br/>  
    *  
    *   @version   1.0  
    *   @author   wz  
    */  
  public   class   CheckLoginFilter  
          implements   Filter   {  
      protected   FilterConfig   filterConfig   =   null;  
      private   String   redirectURL   =   null;  
      private   List   notCheckURLList   =   new   ArrayList();  
      private   String   sessionKey   =   null;  
   
      public   void   doFilter(ServletRequest   servletRequest,  
                                                ServletResponse   servletResponse,   FilterChain   filterChain)   throws  
              IOException,   ServletException   {  
          HttpServletRequest   request   =   (HttpServletRequest)   servletRequest;  
          HttpServletResponse   response   =   (HttpServletResponse)   servletResponse;  
   
          HttpSession   session   =   request.getSession();  
          if   (sessionKey   ==   null)   {  
              filterChain.doFilter(request,   response);  
              return;  
          }  
          if   (   (!checkRequestURIIntNotFilterList(request))   &&  
                  session.getAttribute(sessionKey)   ==   null)   {  
              response.sendRedirect(request.getContextPath()   +   redirectURL);  
              return;  
          }  
          filterChain.doFilter(servletRequest,   servletResponse);  
      }  
   
      public   void   destroy()   {  
          notCheckURLList.clear();  
      }  
   
      private   boolean   checkRequestURIIntNotFilterList(HttpServletRequest   request)   {  
          String   uri   =   request.getServletPath()   +  
                  (request.getPathInfo()   ==   null   ?   ""   :   request.getPathInfo());  
          return   notCheckURLList.contains(uri);  
      }  
   
      public   void   init(FilterConfig   filterConfig)   throws   ServletException   {  
          this.filterConfig   =   filterConfig;  
          redirectURL   =   filterConfig.getInitParameter("redirectURL");  
          sessionKey   =   filterConfig.getInitParameter("checkSessionKey");  
   
          String   notCheckURLListStr   =   filterConfig.getInitParameter("notCheckURLList");  
   
          if   (notCheckURLListStr   !=   null)   {  
              StringTokenizer   st   =   new   StringTokenizer(notCheckURLListStr,   ";");  
              notCheckURLList.clear();  
              while   (st.hasMoreTokens())   {  
                  notCheckURLList.add(st.nextToken());  
              }  
          }  
      }  
  }  
  Top

3 楼askr(ask)回复于 2005-06-01 12:38:41 得分 0

楼上的例子和我的差不多,为什么我会出现这种问题Top

4 楼askr(ask)回复于 2005-06-01 12:39:04 得分 0

你的web.xml是如何配置的Top

5 楼askr(ask)回复于 2005-06-02 08:04:27 得分 0

dingTop

相关问题

  • 如何使用文件过滤器
  • 用session校验登录用户是否安全?
  • 登录时的校验码起啥作用?
  • 需要csdn登录时用到的校验码程序
  • 小小的问题:CFileDialog的文件过滤器怎么用呀?
  • 一个过滤器应用的奇怪问题,取不到 getParameter();
  • jsp中文乱码用过滤器解决的问题
  • isapi过滤器?
  • 谁能帮忙介绍一下:Servlet过滤器的具体作用。
  • 文件过滤器 ?

关键词

  • 页面
  • servlet
  • filterconfig
  • 过滤器
  • islog
  • 登录
  • filterchain
  • import javax
  • servletresponse
  • servletrequest

得分解答快速导航

  • 帖主:askr
  • ipv

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo