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 が発生します。サーバーがレルムに対してアクティブに認証する必要があると思いますが、これを行うようにサーバーを構成する方法がわかりません。誰もこれを経験したことがありますか?