我正在使用
<url-pattern>/*</url-pattern>
将所有请求映射到一个sevlet,我在那里进行所有身份验证工作。 但是我想跳过一些静态内容(比如css文件)。所以我尝试了它们 那个sevlet到资源文件的位置
if(isResourceFile){
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("static/" + fileName);
dispatcher.forward(request, response);
}
但这会启动无限循环,因为这将再次调用相同的sevlet
有没有办法解决这个问题,而没有映射web.xml中的所有资源(css)文件?
答案 0 :(得分:1)
url-pattern
的{{1}}最好由/*
独占使用,而不是Filter
。将所有静态文件放在某个文件夹中(可能由更有效FileServlet的Servlet
覆盖?)并让过滤器检查它。
E.g。 (伪)
url-pattern
希望这有帮助。
答案 1 :(得分:0)
假设您只想验证JSP文件,可以更改URL:
/*.jsp
我认为使用过滤器而不是servlet处理身份验证更好。在生产环境中,您应该使用前端Web服务器来获取静态内容。
答案 2 :(得分:0)
如果您不能使用过滤器,并且您必须在没有像'.jsp'这样的扩展名的映射中使用通配符'*',那么这可能对您有用:
if(isResourceFile){
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/static/" + fileName);
dispatcher.forward(request, response);
return;
}
在静态目录的开头添加'/'将为其提供根上下文。