首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何实现虚拟筛选器以将文件排除在筛选器之外?

如何实现虚拟筛选器以将文件排除在筛选器之外?
EN

Stack Overflow用户
提问于 2010-10-11 15:17:08
回答 2查看 1.8K关注 0票数 0

我正在尝试为除login.jsp之外的所有文件实现筛选器。我知道过滤器映射不能排除某些文件。我需要做的是创建另一个过滤器来仅映射login.jsp。如何创建另一个带有url模式/login.jsp且之后没有SessionFilter处理的文件?下面是我为所有文件进行会话筛选的部分代码。

代码语言:javascript
复制
public class SessionFilter implements Filter{ 
   RequestDispatcher rd = null; 

  public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) 
   throws IOException, ServletException{ 
      HttpServletRequest request = (HttpServletRequest)request; 
      HttpSession session = request.getSession(); 

   // New Session so forward to login.jsp 
   if (session.isNew()){ 
     rd = request.getRequestDispatcher("login.jsp"); 
     rd.forward(request, response); 
  } 

  // Not a new session so continue to the requested resource 
   else{ 
      filterChain.doFilter(request, response); 
  } 
} 
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-11 15:22:20

您可以使用request.getServletPath()检查请求的路径是否在您的“排除列表”中。

如果你想从SessionFilter中分离出一个新的Filter,你可以设置一个特殊的标志作为请求属性(比如"loginPage"),它将被其他过滤器检查(如果你想要一个新的FilterSessionFilter中分离出来),或者你可以干脆不调用chain.doFilter()

如果您正在修改SessionFilter,只要不重新调度到"login.jsp“即可。

票数 2
EN

Stack Overflow用户

发布于 2010-10-11 15:26:18

您不需要新的过滤器。你可以在你自己的过滤器上检查它。

代码语言:javascript
复制
if(request.getServletPath().equals("login.jsp") || !session.isNew()) { // or "/login.jsp", not sure about this
   filterChain.doFilter(request, response); 
} else { // session is new and it's not login.jsp
     rd = request.getRequestDispatcher("login.jsp"); 
     rd.forward(request, response);    
}

但我不喜欢这种方法。这看起来像是重写了servlets的JAAS API。而且这意味着对jsp路径进行硬编码,这在维护和可移植性的顺序上可能不是一个好主意。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3904193

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档