论坛首页 入门讨论版 Webwork

利用过滤器来现实未登陆不可进入效果 感觉有点矛盾

浏览 401 次
该帖已经被评为新手帖
作者 正文
时间:2008-05-14
比如说我现在有一个这样的简单项目(MVC)
登陆页面 login.jsp
主页 index.jsp
一个servlet LoginServlet.java 用来处理登陆业务
在不用过滤器的情况下 要实现必须登陆才能访问我的index.jsp
那么我的index.jsp必须要对一个session进行判断 判断是否进行登陆 否则会forward到login.jsp上去
session在LoginServlet.java 中当ID和PASSWORD都正确时进行设置
可能在index.jsp的代码如下
代码块 #1
   <%
    if(session.getAttribute("uname")!=null)
       {
   %>
           <h2>登陆成功</h2><br>
           欢迎,<font color="red"><%=session.getAttribute("uname") %></font>光临留言管理系统<br>
           <h3><a href="notes_list.jsp">进入留言管理页面</a></h3>
           
   <%
       }else
        {
               //经过登陆
        }
    %>




那么我现在加入一个LoginFilter.java用来处理该过程 减少这个经常出现的代码块
LoginFilter.java代码如下

Java code
public class LoginFilter implements Filter {

    public void destroy() {

    }

    public void doFilter(ServletRequest servletrequest,
            ServletResponse servletresponse, FilterChain filterchain)
            throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest)servletrequest;
        HttpSession session = request.getSession(true);
        if(session.getAttribute("uname")!=null)
        {
            filterchain.doFilter(servletrequest, servletresponse);
        }
        else
        {
            request.getRequestDispatcher("login.jsp").forward(servletrequest, servletresponse);
        }
    }

    public void init(FilterConfig filterconfig) throws ServletException {
        
    }

}



那么在我的web.xml里面的

<filter>
      <filter-name>loginfilter</filter-name>
      <filter-class>cn.suiyang.filter.LoginFilter</filter-class>
  </filter>
  <filter-mapping>
      <filter-name>loginfilter</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>



中的 <url-pattern>/* </url-pattern> 这样写是可以去掉很多代码块 #1
但是 由于在 <url-pattern> </url-pattern>里面是 /*所以我的
<servlet-mapping>
<servlet-name>LoginServlet </servlet-name>
<url-pattern>/login.ser </url-pattern>
</servlet-mapping>
里面影射的/login.ser也会进行过滤
那么 登陆操作的时候 就不能进行
当我在login.jsp登陆的时候 提交到 LoginServlet.java 的时候进行过滤
那么 session.getAttribute("uname")为null就会回到login.jsp

如果大家看到这里的话 回问 那你不知道将web.xml里面 过滤器的配置改成

<filter-mapping>
<filter-name>loginfilter </filter-name>
<url-pattern>/index.jsp </url-pattern>
</filter-mapping>
这样只对login.jsp进行过滤 而不对 Servlet映射的地址过滤?
这样确实可以 但是 如果我不是只有一个index.jsp页面呢?我有100个1000个甚至更多呢?
难道我要在我的web.xml里面写
<filter-mapping>

.....
</filter-mapping>
快写100个1000个吗?

初学JSP,对这个问题有点不解 希望各位能够指点
要使用过滤器来完成我这样的功能 但是不过滤掉一些Servlet和一些我不希望进行过滤的页面 怎样处理?

不知道问题描述的可清楚
不清楚的地方我会在描述
    
   
时间:2008-05-14
呵呵

我的解决办法:

在filter中得到请求的路径,并分析该路径是不是login.jsp

如果是,直接filterchain.doFilter(servletrequest, servletresponse);
(在这里要注意的是,不要忘了return;)

否则,session判断
   
0 请登录后投票
时间:2008-05-15
首先谢谢LS的回帖

的一的方法和修改web.xml的参数没有什么区别 如果是100个jsp页面呢 难道在filter里面判断100次吗? 这里肯定有一个很巧妙的解决方法
   
0 请登录后投票
时间:2008-05-15
弄个过滤配置,path在过滤列表中的就不控制
   
0 请登录后投票
时间:2008-05-15
删除.............
   
0 请登录后投票
论坛首页 入门讨论版 Webwork

跳转论坛:
JavaEye推荐