Url模式,用于排除servlet过滤器调用的javax.faces.resource

时间:2012-10-18 13:23:44

标签: java jsf jsf-2 servlet-filters spring-webflow

我创建了一个 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实现的项目。

2 个答案:

答案 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”,则路径将从应用任何过滤器中删除。

另见: