gpt4 book ai didi

java - Jboss过滤器无法捕获所有客户端的HTTP请求

转载 作者:行者123 更新时间:2023-12-01 12:33:08 25 4
gpt4 key购买 nike

我对 jboss servlet 过滤器有一个大问题。我已经为特定的 url-pattern 创建了一个过滤器,但是该过滤器无法捕获对该模式的所有请求,只能捕获来自客户端的 OPTIONS HTTP 请求。

我的过滤器在 web.xml 中声明如下:

<filter>
<filter-name>loginFilter</filter-name>
<filter-class>myFilter</filter-class>
</filter>

<filter-mapping>
<filter-name>loginFilter</filter-name>
<url-pattern>myPattern</url-pattern>
</filter-mapping>

对我来说问题是为什么我无法捕获来自客户端的所有请求...

PS。我正在使用这个包 com.sun.jersey.spi.container.ContainerResponseFilter,过滤器也可在 javax.ws.rs.container.ContainerResponseFilter 中使用。我不知道他们之间有什么区别...

最佳答案

我认为这就是问题所在:-

首先,您需要使用 RequestFilter 而不是 ResponseFilter。

com.sun.jersey.spi.container.ContainerResponseFilter 是 jersey 1.x 过滤器。 API link here.

最新版本的 jersey 使用 javax.ws.rs.container.ContainerResponseFilterAPI link here

看起来您的类路径中有 jersey 1.x 和 2.x jar。您需要使用您需要的一个并删除另一个。

假设您使用的是最新的 2.x jar您需要实现自己的 RequestFilter ,如下所示:-

    @Provider
public class YourReqeustFilter implements ContainerRequestFilter {
@Override
public void filter(ContainerRequestContext requestContext)
throws IOException {
// Use ContainerRequestContext to intercept the http request.
}
}
}

那么您的 servlet 的 web.xml 应该如下所示:-

<servlet>
<servlet-name>MY API</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>javax.ws.rs.container.ContainerRequestFilter</param-name>
<param-value>yourReqeustFilter</param-value>
</init-param>
<init-param>
<param-name>javax.ws.rs.container.ContainerResponseFilterr</param-name>
<param-value>yourResponseFilter</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

但是请注意,当您的页面通过 web.xml 中的声明性安全性进行保护并且其上有过滤器时;您的过滤器将无法拦截页面上被阻止的 HTTP 请求;因为请求首先到达您的容器,并且容器由于声明性安全性而保护它,然后请求最终到达您的过滤器。简而言之,容器优先于过滤器。

在这种情况下,您可以将相关页面从声明性安全性中分离出来,并在过滤器中以编程方式处理安全性部分。

例如,在上面的 filter 方法中,您可以使用以下方法来保留 SecurityContext:-
requestContext.getSecurityContext() 并获取对提供安全性访问的方法的访问权限。
程序化安全性的开始 here.

关于java - Jboss过滤器无法捕获所有客户端的HTTP请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25784987/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com