大伙儿看看我这个过滤器写的有问题没!多谢!

来源:百度知道 编辑:UC知道 时间:2024/06/07 13:46:16
想实现的的是只有登陆了以后才能访问其他页面,否则返回登陆界面!

过滤器代码如下:
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {

HttpServletRequest request = (HttpServletRequest) arg0;
HttpServletResponse response = (HttpServletResponse) arg1;
HttpSession session = request.getSession(true);

String uriStr =request.getRequestURI();
System.out.println(">>>>>>>>>>>" + request.getRequestURI());

String uname=(String) session.getAttribute("name");
if (uname == null || "".equals(uname))

{
RequestDispatcher rd = arg0.getRequestDispatcher("/login.jsp");
rd.forward(arg0, arg1);

}
else {

arg2.doFilter(arg0, arg1);

}

}

xml配置文件如下:
<filter>
<filter-name>LoginFilter</filter-n

楼上说的对,你的登陆这个业务逻辑也被过滤了,这个 if后面再加一个判断
if (uname == null || "".equals(uname)) 《-----这句

{
RequestDispatcher rd = arg0.getRequestDispatcher("/login.jsp");
rd.forward(arg0, arg1);
}

改为
if ((uname == null || "".equals(uname))&&(uriStr.indexOf("login.jsp") == -1 && uriStr.indexOf("login.do") == -1) <---如果你是struts这里就过滤login.do否则写上你执行登陆的servlet
{
RequestDispatcher rd = arg0.getRequestDispatcher("/login.jsp");
rd.forward(arg0, arg1);

}

你是不是从界面到servlet来往name的session里加值的 因为你从界面不是先到servlet而是先到过滤器 所以过滤器里面session还没有值 直接又给你干回登陆界面了