用过滤器做登录校验的问题
网站中任何页面 ,除了登录,全要登录后才可访问,我编写了一个过滤器,但运行首页时,在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




