当前位置: 首页 > 面试题库 >

网址模式可将Javax.faces.resource排除在servlet过滤器的调用之外

微生宝
2023-03-14
问题内容

我创建了一个 Servlet过滤器 来处理会话超时和身份验证。

@WebFilter(urlPatterns={"/acc/*"})
public class ResourceAuthorizationFilter implements Filter { ... }

我要过滤的页面具有以下模式:/acc/login-flow/acc/profiles- flow。还会针对资源(css,js和图像)调用过滤器。如何配置 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实现的项目。


问题答案:

只需将资源移到外部的其他文件夹中即可/acc。他们是在默认情况下应该是在/resources文件夹吗,这样就可以使用<h:outputScript><h:outputStylesheet><h:graphicImage>以正确的方式。

如果由于某种原因无法解决该问题,那么您确实需要在doFilter()实现中检查请求URI 。也就是说, 无法 在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>



 类似资料:
  • 我正在研究一个合作医疗系统。 我的代码在url调用的servlet的

  • 假设我已经定义了这些RESTendpoint: 我定义了两个过滤器(日志记录和授权),在这些过滤器中,我想获得与当前请求匹配的url模式。使用上述示例: 如果请求是一个GET到 /variables,我需要"/变量" 如果请求是一个GET到 /variables/myfancyname,我需要"/变量/{name}" 如果请求是一个PUT到 /variables/myfancyname/myval

  • 问题内容: 有什么办法可以使过滤器映射不包括子目录? 例如。 我的上下文根目录中有.xhtml文件,并且我还有一个名为“ test”的子文件夹,其子文件夹具有相同的扩展名。是否可以将过滤器映射到上下文根目录中的文件,而不映射到“ test”目录中的文件? 问题答案: 该是匹配确实是限制。它仅允许精确,前缀或后缀匹配。不是中间/整体/正则表达式匹配。因此,例如,您打算做的事情行不通。 如果只想在文件

  • 问题内容: 我已经编写了REST Web服务方法,并且。以下是Web服务类`@Path(“ / service”)公共类Service { }` 在Web服务方法中,正在使用调用,而正在使用的URL是http:// localhost:8080 / xxxx / xxxx / service / val / zzzz 。zzzz是要传递的值。URL模式的和是/安全。现在,问题没有被调用,而直接调用

  • ExtendedService内部: 但是当我开始时,我得到无效的Bean定义,因为myService是绑定错误。如何排除原来的MyService? 例外情况: 原因:org.springframework.beans.factory.support.beandefinitionoverrideException:URL[file:svc.xml]中定义的名为“My Service”的bean定义

  • 我将在一个已经存在的网站中介绍Spring Web Security。现在出现了一个问题: 我希望我的自定义筛选器在Spring Security筛选器链之前在Tomcat筛选器链中执行。我不想让他们成为这个Spring安全过滤器链的一部分。 我所找到的只是Spring Boot中的一个解决方案(请参见“Spring-How to insert a filter before SpringSecu