【发布时间】:2011-11-06 17:58:05
【问题描述】:
我希望在理解 java 过滤器的特定行为方面有所帮助:我编写了一个简单的过滤器,它获取所有用户请求,如果未登录的用户需要受限资源,过滤器会将用户转发到主页。这是我的代码:
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
// place your code here
HttpServletRequest req = (HttpServletRequest) request;
String uri = req.getRequestURI();
System.out.println("\n\nFILTERING...\n\n");
//Se la risorsa appartiene all'area ristretta e l'utente non è
//loggato lo sbatto fuori
if(uri.contains("restricted") && (req.getSession(false) == null || req.getSession(false).getAttribute("user") == null)) {
System.out.println("\n\nCannot access\n\n");
//((HttpServletResponse) response).sendRedirect("/Hotel/index.jsp");
req.getRequestDispatcher("/index.jsp").forward(request, response);
}
else {
// pass the request along the filter chain
System.out.println("\n\nNext step\n\n");
chain.doFilter(request, response);
}
}
以及web.xml中的映射:
<filter>
<filter-name>MyFilter</filter-name>
<filter-class>mycontroller.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>MyFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
让我感到奇怪的是,如果我通过 URL 询问受限资源,doFilter 方法会在移动到家之前被调用多次(服务器记录 'FILTERING... 无法访问' 4,5 次) . 我正在使用Tomcat 7。 有人可以帮我理解吗?非常感谢
【问题讨论】:
-
Uriah Carpenter 回答了一个与这个问题非常相似的问题:stackoverflow.com/questions/5157615/… -> 客户端对页面上的每个组件发出不同的请求。还是谢谢
标签: java servlets servlet-filters