我创建了一个 servlet过滤器来处理会话超时和身份验证。
@WebFilter(urlPatterns={"/acc/*"})
public class ResourceAuthorizationFilter implements Filter { ... }
我要过滤的网页的格式如下:/acc/login-flow
,/acc/profiles-flow
。过滤器也被调用资源(css,js和images)。如何配置 urlPatterns 以排除过滤这些资源?
EDIT1
以下是一些已过滤的网址:
http://localhost:8081/acme-0.0.1/acc/login-flow
http://localhost:8081/acme-0.0.1/acc/javax.faces.resource/theme.css
http://localhost:8081/acme-0.0.1/acc/javax.faces.resource/jquery/jquery.js
http://localhost:8081/acme-0.0.1/acc/javax.faces.resource/primefaces.js
http://localhost:8081/acme-0.0.1/acc/javax.faces.resource/ajax.gif
http://localhost:8081/acme-0.0.1/acc/javax.faces.resource/login.png
http://localhost:8081/acme-0.0.1/acc/javax.faces.resource/header.png
http://localhost:8081/acme-0.0.1/acc/javax.faces.resource/images/ui-bg_flat_75_ffffff_40x100.png
http://localhost:8081/acme-0.0.1/acc/javax.faces.resource/images/default.png
http://localhost:8081/acme-0.0.1/acc/javax.faces.resource/images/ui-icons_888888_256x240.png
我在webapp/resources
文件夹下有一些自定义的css / js文件,但这些文件不在那里。
acc
部分来自:
<servlet-mapping>
<servlet-name>Spring MVC Servlet</servlet-name>
<url-pattern>/acc/*</url-pattern>
</servlet-mapping>
EDIT2
这些代码示例来自一个使用JSF 2.0,PrimeFaces 3.4.1,Spring 3.0.5.RELEASE,Spring Security 3.0.3.RELEASE和Spring Web Flow 2.3.0.RELEASE实现的项目。
答案 0 :(得分:2)
只需将资源移至/acc
之外的其他文件夹即可。默认情况下,它们应该位于/resources
文件夹中,以便您可以正确使用<h:outputScript>
,<h:outputStylesheet>
和<h:graphicImage>
。
如果由于某种原因无法修复,那么您真的需要检查doFilter()
实现中的请求URI。有 no 方法可以排除URL模式中的子模式。
String path = request.getRequestURI().substring(request.getContextPath().length());
if (path.startsWith("/acc" + ResourceHandler.RESOURCE_IDENTIFIER)) {
chain.doFilter(request, response);
} else {
// ...
}
更新:根据您的问题更新,您使用Spring MVC有一些不明原因。它还处理所有JSF资源请求。你应该告诉它不要这样做。我无法从头顶分辨出如何做到这一点,但至少与<mvc:resources>
有关。
答案 1 :(得分:1)
如果您已在项目中使用Spring Security。在安全上下文中注册自定义会话管理过滤器很容易,然后您可以轻松地排除添加新的拦截网址元素的模式,如下所示:
<intercept-url pattern="/javax.faces.resource/**" filters="none"/>
请参阅命名空间配置documentation。
如果设置为“none”,则路径将从应用任何过滤器中删除。
另见: