- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
这是一个有效的 web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<session-config>
<session-timeout>30</session-timeout>
</session-config>
<filter>
<filter-name>rememberMeCookieFilter</filter-name>
<filter-class>be.example.fun.jsp.filters.RememberMeCookieFilter</filter-class>
</filter>
<filter>
<filter-name>mustBeSignedInFilter</filter-name>
<filter-class>be.example.fun.jsp.filters.MustBeSignedInFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>rememberMeCookieFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>mustBeSignedInFilter</filter-name>
<url-pattern>/private/*</url-pattern>
</filter-mapping>
</web-app>
当我删除 <filter>
元素并改用以下注释:
@WebFilter(filterName="rememberMeCookieFilter")
public class RememberMeCookieFilter implements Filter
@WebFilter(filterName="mustBeSignedInFilter")
public class MustBeSignedInFilter implements Filter
然后 Tomcat 7.0.14 给我以下错误:
java.lang.IllegalArgumentException: Filter mapping must specify either a <url-pattern> or a <servlet-name>
at org.apache.catalina.core.StandardContext.validateFilterMap(StandardContext.java:2956)
at org.apache.catalina.core.StandardContext.addFilterMap(StandardContext.java:2915)
at org.apache.catalina.deploy.WebXml.configureContext(WebXml.java:1180)
at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1270)
...
我按照this question的回答做了,但这对我不起作用。
这是我的网络应用程序的依赖项:
<dependencies>
<!-- SLF4J (+ LOGBack) for logging -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.6.4</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy</artifactId>
<version>1.8.3</version>
</dependency>
<!-- The servlet API that I installed in my local repo -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>3.0</version>
<type>jar</type>
<scope>provided</scope>
<!--optional>false</optional-->
</dependency>
<!-- JUnit for testing -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.2</version>
<scope>test</scope>
</dependency>
</dependencies>
编辑:我只在使用 Tomcat (7.0.14) 时遇到问题。 Glassfish 很好。
最佳答案
这是 Tomcat 7 中的一个错误。我将其报告为 issue 53354 .
As it's not possible to specify the invocation order in a
@WebFilter
, users are forced to explicitly specify<filter-mapping>
in web.xml. This works in combination with a@WebFilter(filterName)
in Glassfish and JBoss AS as follows:@WebFilter(filterName="filter1")
public class Filter1 implements Filter {}
@WebFilter(filterName="filter2")
public class Filter2 implements Filter {}with
<filter-mapping>
<filter-name>filter1</filter-name>
<url-pattern>/url1/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>filter2</filter-name>
<url-pattern>/url2/*</url-pattern>
</filter-mapping>However it fails in Tomcat 7.0.27 with the following confusing exception (the
<url-pattern>
is been set)Caused by: java.lang.IllegalArgumentException: Filter mapping must specify either a <url-pattern> or a <servlet-name>
at org.apache.catalina.core.StandardContext.validateFilterMap(StandardContext.java:3009)
at org.apache.catalina.core.StandardContext.addFilterMap(StandardContext.java:2968)
at org.apache.catalina.deploy.WebXml.configureContext(WebXml.java:1207)
at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1294)
at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:855)
at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:345)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5161)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
... 7 more
与此同时,您最好的选择是改用 Glassfish 或 JBoss AS,或者通过 <filter>
注册过滤器。无论如何。
关于java - 使用 Tomcat,@WebFilter 不适用于 web.xml 中的 <filter-mapping>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10856866/
我正在将基于 Servlet 2.5 的 webapp 迁移到 Servlet 3.0,遇到了这个问题,我不知道如何将这些不同的过滤器映射压缩到一个 @WebFilter 注释中类。 过滤器:
考虑我的 web.xml 中的以下过滤器映射 rememberMeCookieFilter /* mustBeSignedInFilter /private/*
如果是这样,你怎么做? 是的,这听起来像是我的最后一个问题。它本质上是相同的问题。我有一个 @javax.servlet.annotation.WebFilter直接打包到 war 中时效果很好。现在
我有一个使用 Spring Boot 2.0.0.M5/2.0.0.BUILD-SNAPSHOT 的 Spring Boot WebFlux 应用程序。我需要将跟踪 ID 添加到所有日志中。 为了让它
类可以用@WebFilter(urlPatterns="*")注释,但spring不会根据请求运行它。为什么?如果我向 Application 类添加 @ServletComponentScan 注释
我一直在研究受 balusC 的 answers 启发的代码。 。基本上它是一个网络过滤器,如果有记住我的cookie,它会尝试登录用户。 登录发生后,它首先从 userService-EJB 获取
我正在尝试将 WebFilter 与 JSF 2 结合使用,但我的过滤器无法正常工作。无法识别 urlPattern。 我的过滤器类: @WebFilter(urlPatterns = {"/rws/
虽然我似乎有它们的“精确”副本,但我已经阅读了很多示例,所以我无法弄清楚为什么当我导航到 /login 而不是 /时我的过滤器会执行限制/*。我已尝试使用注释(如下例所示)和 XML 来定义 WebF
我正在尝试在我的 Spring 应用程序中添加 WebFilter。但是,我没有使用 .xml 文件(甚至没有 web.xml,因为我的应用程序不需要它)。 因此,我添加到扩展 AbstractAnn
我想实现一个 WebFilter,它读取传入请求的特定 header ,使用此 header 的值向另一个响应式(Reactive) REST 端点调用 GET 请求,然后使用 GET 响应的值改变原
我在 urlrewrite.xml 中有以下配置: ^(/event/showEventList)(\.{1})(\bhtm\b|\bhtml\b)(\?{0,1})(
我想在 webfilter 配置 Spring 应用程序中使用通配符/{login}/cart/* 添加此路径的过滤器,但 {login} 的通配符不起作用 @Bean public FilterRe
我的代码中有一个具有以下设置的过滤器。我映射了值请求中的所有内容 @WebFilter(value="/*", dispatcherTypes={DispatcherType.REQUEST, Di
我正在使用 Google Admob,当我删除 testDevice 行时,我在控制台屏幕上看到日志下方。这是什么意思?有什么问题吗?或者我需要忽略这些日志行。 To get test ads on
我正在尝试遵循有关使用 Guice 作为 Web 服务器的最小教程,而不需要 web.xml:http://www.remmelt.com/post/minimal-guice-servlet-wit
我使用过滤器检查登录用户的 URL 模式。 但是我有很多 URL 模式需要过滤。 { "/table/*", "/user/*", "/contact/*", "/run/*", "/conf/*",
我创建了一个过滤器,我可以在其中访问有效负载的主体并对其执行一些逻辑(现在假设我记录主体)。在最后一步中,我返回了 Mono,但是当请求通过 Controller 继续发送到服务时,它会抛出请求正文丢
我正在尝试实现一个 WebFilter 来检查 JWT 并在检查失败或结果无效时抛出异常。我有一个处理这些异常的 @ControllerAdvice 类。但它不起作用。 这是 WebFilter 类:
我在 header 中使用 JWT 来验证用户请求。 @Override public Mono filter(ServerWebExchange exchange, WebFilterChain c
在我的应用程序中,我有一个 WebFilter。这个 Webfilter 应该检查一个 coockie。但是使用 FacesContext.getCurrentInstance() 会导致 Nullp
我是一名优秀的程序员,十分优秀!