1

Jersey を使用して記述された REST サービスに対して受け入れテストを実行しています。私のサービスでは、認証に成功した (BASIC) ユーザーの名前を取得する必要があります。

@Context private SecurityContext securityContext; //at class level

String username = securityContext.getUserPrincipal().getName()  //inside a resource

Jersey クライアント API を使用して、Grizzly サーバーに対して実行しています。次のようにサーバーをセットアップしました。

public class BaseResourceTest extends JerseyTest {

   public BaseResourceTest() throws Exception {

    super(new WebAppDescriptor.Builder("net.tds.adm.na.batchcut")
        .contextPath(baseUri.getPath())
        .contextParam("contextConfigLocation","classpath:testContext.xml")
        .initParam("com.sun.jersey.api.json.POJOMappingFeature",
            "true").servletClass(SpringServlet.class)
        .contextListenerClass(ContextLoaderListener.class)
        .build());

     }

.......

}

私のテストでは、次のように認証ヘッダーを渡します。

WebResource resource = resource().path(_url);
return resource.type(MediaType.APPLICATION_FORM_URLENCODED_TYPE).header(HttpHeaders.AUTHORIZATION, new String(Base64.encode("judge:smails"))).post(ClientResponse.class, _formData);

ただし、私のリソースでは、ユーザー名を取得しようとすると NPE が発生します。サーバーがレルムに対してアクティブに認証する必要があると思いますが、これを行うようにサーバーを構成する方法がわかりません。誰もこれを経験したことがありますか?

4

1 に答える 1

2

残念ながら、Grizzly HttpServer は現時点で認証をサポートしていません。ただし、ここでは、Jersey Filter を使用して認証を実装する方法の簡単な例を見つけることができます。

http://simplapi.wordpress.com/2013/01/24/jersey-jax-rs-implements-a-http-basic-auth-decoder/

于 2013-04-12T23:25:13.773 に答える