Jersey ContainerRequestFilter 未触发

标签 jersey jersey-2.0

我正在尝试使用 ContainerRequestFilter 对基于 Tomcat 的 Jersey 应用程序强制执行某些身份验证。我关注了this document 。 问题:过滤器永远不会被触发

过滤器类别:

@Provider
public class AuthFilter implements ContainerRequestFilter {

    @Override
    public void filter(ContainerRequestContext requestContext)
        throws IOException {

        // MY AUTHENTICATION CODE GOES HERE

    }

web.xml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    id="debate-rest"
    version="3.0">
  <display-name>rest</display-name>
   <servlet>  
    <servlet-name>Jersey REST Service</servlet-name>  
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>  
    <init-param>
        <param-name>com.sun.jersey.spi.container.ContainerRequestFilters</param-name>
        <param-value>com.hck.debate.rest.security.AuthFilter</param-value>
    </init-param>
    <init-param>  
      <param-name>jersey.config.server.provider.packages</param-name>  
      <param-value>com.hck.debate.rest.controller</param-value>  
    </init-param>  
    <init-param>  
        <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>  
        <param-value>true</param-value>  
    </init-param>      
    <load-on-startup>1</load-on-startup>  
  </servlet>  
  <servlet-mapping>  
    <servlet-name>Jersey REST Service</servlet-name>  
    <url-pattern>/*</url-pattern>  
  </servlet-mapping>

最佳答案

好吧,我不知道 jersey.config.server.provider.packages 初始化参数不仅需要引用服务类(API 端点),还需要引用包括过滤器在内的所有类。

现在可以了:

<init-param>  
  <param-name>jersey.config.server.provider.packages</param-name>  
  <param-value>com.hck.debate.rest.controller;com.hck.debate.rest.security</param-value>
</init-param>
<init-param>
    <param-name>com.sun.jersey.spi.container.ContainerRequestFilters</param-name>
    <param-value>com.hck.debate.rest.security.AuthFilter</param-value>
</init-param>

关于Jersey ContainerRequestFilter 未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56753089/

相关文章:

java - 使用 Jersey 防止对象属性内的空值

java - Jersey 2 : how singleton resources are used?

eclipse - Jersey 2 - 例如书店的最小 pom.xml,得到 404

java - 最新的 Jersey 示例不起作用

java - 未提取查询参数 - JAX-RS 和 Jersey

java - Jersey 抛出错误请求异常(400)

ContainerRequestFilter 上的 junit 测试 - 验证 WebApplicationException 的实体

未调用 Java Rest Put 方法 (Jersey/JAX)

java - Jersey - 如何模拟服务