2012-09-22 34 views
0

我在我的登录应用程序中使用了过滤器。我想要一些页面只有 由管理员访问。我已将这些页面保存在管理文件夹中,并且在我的项目中实现了过滤器 。但其他用户仍可通过URL访问 。受登录过滤器限制的页面仍可被其他用户访问

我哪里去错了?

import java.io.IOException; 

import javax.servlet.Filter; 
import javax.servlet.FilterChain; 
import javax.servlet.FilterConfig; 
import javax.servlet.ServletException; 
import javax.servlet.ServletRequest; 
import javax.servlet.ServletResponse; 

import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.servlet.http.HttpSession; 


public class LoginFilter implements Filter { 

    @Override 
    public void init(FilterConfig config) throws ServletException { 
     // If you have any <init-param> in web.xml, then you could get them 
     // here by config.getInitParameter("name") and assign it as field. 
    } 

    @Override 
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { 
     HttpServletRequest request = (HttpServletRequest) req; 
     HttpServletResponse response = (HttpServletResponse) res; 
     HttpSession session = request.getSession(false); 

     if (session == null || session.getAttribute("user") == null) { 
      response.sendRedirect(request.getContextPath() + "/Login.xhtml"); // No logged-in user found, so redirect to login page. 
     } else { 
      chain.doFilter(req, res); // Logged-in user found, so just continue request. 
     } 
    } 

    @Override 
    public void destroy() { 
     // If you have assigned any expensive resources as field of 
     // this Filter class, then you could clean/close them here. 
    } 

} 

回答

2

理论上有这2倍可能的原因:

  • 过滤器不运行在所有
  • 过滤器不保护应用程序的页面。

我知道这听起来很平凡,但你可以指定过滤器是否运行,如果是的话,你来chain.doFilter(req,res)?

+0

在上面的问题规范中,我已经包括除了UI之外的所有与登录相关的代码......我在哪里出错?如果过滤器没有得到执行,那么我需要做什么来纠正它? – Idea

+0

是的,但是你是否尝试过调试这个,毕竟你可以像其他任何代码一样调试过滤器。什么是您尝试访问的网址?您已将过滤器定义为仅适用于以admin /开头的网址...您告诉您的过滤器根本不运行?我记得有一次,我看到,放入默认包的servlet没有被Tomcat引擎(大约5年前)正确处理。请尝试将过滤器放入一些包 –

+0

在另一个包中添加过滤器后仍然面临同样的问题 – Idea

相关问题