0

Glassfish 3.1 で非常に基本的な JDBC レルム認証を設定しようとしています。アプリケーションは、1 つのビジネス メソッドを持つ EJB と、リモート クライアント アプリケーション (Web アプリケーションではない) で構成されます。ここで何か基本的なことが欠けていると思います。

Java EE 6 チュートリアルに従い、すべての手順を完了しました。エラーは発生しませんが、ユーザー名とパスワードが正しいものとして受け入れられません。ユーザーとグループを格納するために単一のテーブルを使用しようとしているため、認証に使用されるテーブルの構造に問題がある可能性があると思います。(私よりも知識のある人による別の投稿で、これが可能であることが言及されており、公式のチュートリアルでも単一のテーブルが使用されています。すべてのユーザーは 1 つのグループ (「ユーザー」) に属するため、 2 番目のテーブルです。アプリはできるだけシンプルに保ちたいと考えています。)

1 つのテーブル ('ACCOUNTS') を持つデータベース ('auth') があります。これには 3 つのフィールドがあります。主キーである 'NAME'、'PASSWORD' および 'GROUPS' です。テーブルに制約はありません。

ユーザーを追加しました:

INSERT INTO ACCOUNTS (NAME, PASSWORD, GROUPS) VALUES ('Bob', 'bob', 'users');

私の glassfish-application.xml には、ロール マッピングとレルムが指定されています。

<glassfish-application>
  <security-role-mapping>
    <role-name>users</role-name>
    <group-name>users</group-name>
  </security-role-mapping>
  <realm>jdbcRealm</realm>
</glassfish-application>

レルム設定: (Glassfish スクリーンショット)

Realm Name: jdbcRealm
JAAS Context: jdbcRealm
User Table: auth.ACCOUNTS
User Name Column: name
Password Column: password
Group Table: auth.ACCOUNTS
Group Name Column: groups

豆:

@Stateless
@DeclareRoles("users") 
public class ProtectedBean implements ProtectedBeanRemote {
    private static final Logger logger = Logger.getLogger(ProtectedBean.class.getName());

    @Override
    @RolesAllowed("users")
    public void doProtectedStuff() {
        logger.log(Level.INFO, "Protected method accessed.");
    }

}

JDBC 接続プールとリソースも作成されます。

リモート クライアントから Bean を呼び出すと、ログイン プロンプトが表示されます。名前とパスワードを入力すると、SecurityException が発生します。

javax.security.auth.login.LoginException: Security Exception
    at javax.security.auth.login.LoginContext.invoke(LoginContext.java:870)
    ...
Caused by: java.lang.SecurityException
    at javax.security.auth.login.LoginContext.invoke(LoginContext.java:871)

この後、名前/パスワードが間違っている場合と同様に、再度ログイン ウィンドウが表示されます。レルムを使用すると、file完全に機能しますが、jdbc レルムでは機能しません。

テーブルは別のものにする必要がありますか?(複数のテーブルを使用する必要がありますか?) それとも何か間違っていますか? 前もって感謝します!

4

1 に答える 1

0

グループ名の値は大文字にする必要があります

于 2013-03-25T11:08:46.283 に答える