gpt4 book ai didi

java - 为什么我的 Jersey 过滤器没有被触发?

转载 作者:行者123 更新时间:2023-11-29 08:37:22 25 4
gpt4 key购买 nike

我只是在我的 REST API 中测试我的第一个 Jersey 过滤器。请检查以下代码。

AuthenticationFilter - Jersey 过滤器

@Secured
@Provider
@Priority(Priorities.AUTHENTICATION)
public class AuthenticationFilter implements ContainerRequestFilter{

// @Context
// private ResourceInfo resourceInfo;
public AuthenticationFilter()
{
System.out.println("test printing");
}

@Override
public void filter(ContainerRequestContext crc) throws IOException
{
String headerString = crc.getHeaderString("Bearer");
System.out.println("bluh: "+headerString);

}
}

Secured - 只是一个用于Secured NameBinding 注释的接口(interface)

import java.lang.annotation.Retention;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import javax.ws.rs.NameBinding;


@NameBinding
@Retention(RUNTIME)
public @interface Secured {}

UserJsonService - 休息电话

@Path ("/user")
public class UserJSONService {

@GET
@Path("/test")
@Produces(MediaType.APPLICATION_JSON)
@Secured
public Response test()
{
return Response.status(Response.Status.OK).entity("sd").build();
}
}

这里的问题是当我启动 test REST 调用时,过滤器根本没有被触发。我知道这一点,因为没有像我希望的那样在控制台中打印任何内容。

因为我使用了注解,所以我没有对我的web.xml文件做任何改动,但是至于你的信息如下。

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 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">
<servlet>
<servlet-name>ExampleServlet</servlet-name>
<servlet-class>test.ExampleServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>Jersey RESTful Application</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>rest</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>ExampleServlet</servlet-name>
<url-pattern>/ExampleServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Jersey RESTful Application</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>

这里有什么问题吗?

最佳答案

过滤器和服务/资源都应该存在于 rest 包或其子文件夹之一中。也可以指定多个由“;”分隔的包。例如:rest;filter

关于java - 为什么我的 Jersey 过滤器没有被触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42943032/

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