42

ContainerRequestFilterTomcat ベースの Jersey アプリケーションで認証を強制するために を使用しようとしています。私はこのドキュメントに従いました。問題 : フィルターがトリガーされない

フィルタ クラス:

@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>
4

10 に答える 10

2

ジャージーでフィルターを機能させるための最小要件:

  • フィルター クラスに @Provider アノテーションを追加する
  • フィルター クラスの名前空間を「jersey.config.server.provider.packages」init-param に含める必要があります

他の設定は必要ありません (例: 'com.sun.jersey.spi.container.ContainerRequestFilters' init-param または ResourceConfig)

于 2014-10-18T06:34:35.520 に答える
2

JAX-RS 2 、 jersey でも同じ問題があり、以下の注釈で修正されました

 @PreMatching
于 2014-12-01T23:33:22.740 に答える
0

私のように行き詰まった場合は、TomEE 1.7.X が ContainerRequestFilter を含まない JAX-RS 1.1 を使用していることに注意してください。

于 2016-08-03T11:51:46.030 に答える
0

注釈を使用する代わりに@Provider(私の場合は機能しませんでした)、ContainerRequestFilter手動で次のように登録できますJerseyServletFactory

JerseyServletFactory jerseyServletFactory = new JerseyServletFactory(config);
HttpServlet myServiceServlet = jerseyServletFactory.create(myResource);

// Register your ContainerRequestFilter like this
jerseyServletFactory.addRequestFilter(new MyFilter());

httpServer.register(myServiceServlet, "/api");
httpServer.start();
于 2015-09-30T16:49:45.567 に答える
0

MULE ESB でこの問題を抱えている人向け。パスを次のように登録することを忘れないでください:

<jersey:resources doc:name="REST">
   <component doc:name="rest component">
     <spring-object bean="endpoit"/>
   </component>
   <jersey:package packageName="path @Provider-s"/>
</jersey:resources >
于 2016-12-06T10:23:03.150 に答える
-1

javax.ws.rs の代わりに com.sun.jersey を使用したところ、うまくいきました

import com.sun.jersey.spi.container.ContainerRequestFilter import com.sun.jersey.spi.container.ContainerRequest

Dropwizard ユーザーはこれを行う必要があります

environment.jersey().getResourceConfig()
           .getContainerRequestFilters()
           .add(filter);
于 2016-05-07T05:29:50.130 に答える