0

アプリケーションの単体テストを作成していますが、行き詰まっています。テストのために、アノテーションを介して保護している単純な 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
    );
}
4

1 に答える 1

1

私の状況は少し異なりますが、同じエラーが発生し、なんとか回避できました。「maven-embedded-glassfish-plugin」maven プラグインから GF 3.1.2 を開始していますが、これも同様に機能する可能性があります。

次のシステム プロパティを設定してみてください。

java.security.auth.login.config=target/test-classes/login.conf

これは、login.conf ファイルのコピーを指している必要があります。このファイルは、Glassfish ドメイン フォルダの「config」フォルダにあります。

于 2012-06-21T09:57:57.633 に答える