浏览 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和一些我不希望进行过滤的页面 怎样处理? 不知道问题描述的可清楚 不清楚的地方我会在描述 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
时间:2008-05-14
呵呵
我的解决办法: 在filter中得到请求的路径,并分析该路径是不是login.jsp 如果是,直接filterchain.doFilter(servletrequest, servletresponse); (在这里要注意的是,不要忘了return;) 否则,session判断 |
|
| 返回顶楼 | |
|
时间:2008-05-15
首先谢谢LS的回帖
的一的方法和修改web.xml的参数没有什么区别 如果是100个jsp页面呢 难道在filter里面判断100次吗? 这里肯定有一个很巧妙的解决方法 |
|
| 返回顶楼 | |
|
时间:2008-05-15
弄个过滤配置,path在过滤列表中的就不控制
|
|
| 返回顶楼 | |
|
时间:2008-05-15
删除.............
|
|
| 返回顶楼 | |





