アプリケーションの単体テストを作成していますが、行き詰まっています。テストのために、アノテーションを介して保護している単純な HelloWebServlet があります。
@WebServlet(urlPatterns = {"/hello"}) @ServletSecurity(@HttpConstraint(rolesAllowed = {"user"}))
CommandRunner 呼び出しから list-file-users および list-file-groups への出力が正しいため、常に正常に機能する方法でサーバーを起動しており ([1] を参照)、ユーザーの作成 ([2] を参照) も正常に動作しているようです。 、しかし、ユーザー名とパスワードを使用して接続しようとすると、次のエラーが発生します。
警告: WEB9102: Web ログインに失敗しました: com.sun.enterprise.security.auth.login.common.LoginException: ログインに失敗しました: ログイン構成が見つかりません
呼び出しコードは、Jersey クライアント API を使用します。
@Test
public void testPingServletLoggedIn() {
Client client = Client.create();
client.addFilter(new HTTPBasicAuthFilter(GlassFishServerHelper.USERNAME, "xx"));
WebResource webResource = client.resource(GlassFishServerHelper.getBaseUri() + "/hello");
ClientResponse clientResponse = webResource
.accept(MediaType.TEXT_PLAIN)
.get(ClientResponse.class); // @GET
assertEquals(ClientResponse.Status.OK, clientResponse.getClientResponseStatus());
}
(注: javax.enterprise.system.core.security.level=FINE を設定しようとしましたが、その呼び出しは次のエラーで失敗しました: PlainTextActionReporterFAILURENo configuration found for javax.enterprise.system.core.security . Drat!)
これを Glassfish-embedded-all-3.1.2.jar (製品バージョン) と glassfish-embedded-all-3.2-b06.jar の両方に対して試しましたが、結果は同じでした。これは何が解決すると思いますか?私はGFEで何度も苦労して成功し、戦いなしであきらめることができませんでした!
==== [1] サーバー起動(抜粋) ====
public static void startServer() {
GlassFishProperties gfProps = new GlassFishProperties();
gfProps.setPort("http-listener", PORT);
GLASSFISH = GlassFishRuntime.bootstrap().newGlassFish(gfProps);
GLASSFISH.start();
enableDefaultPrincipleToRoleMapping();
createUsersAndGroups();
ScatteredArchive archive = new ScatteredArchive(WEB_APP_NAME, ScatteredArchive.Type.WAR);
File classesDir = new File("out/production/simple-security-servlet-test");
archive.addClassPath(classesDir);
DEPLOYER = GLASSFISH.getDeployer();
APP_NAME = DEPLOYER.deploy(archive.toURI());
private static void enableDefaultPrincipleToRoleMapping() throws GlassFishException {
CommandRunner cr = GLASSFISH.getCommandRunner();
CommandResult result = cr.run("set",
"server-config.security-service.activate-default-principal-to-role-mapping=true");
}
====【2】ユーザー作成(抜粋)====
private static void createUsersAndGroups() throws GlassFishException {
CommandRunner commandRunner = GLASSFISH.getCommandRunner();
File passwordFile = new File("password-file.txt");
CommandResult result = commandRunner.run("create-file-user",
"--passwordfile", passwordFile.getAbsolutePath(),
"--groups", "user",
USERNAME
);
}