0

私はJSF-Hibernate Webアプリケーションを持っています。Windows AD に対してユーザーを認証する必要があり、Web アプリケーションはグループ X のメンバーからのログインのみを許可する必要があります。それ以外の場合は、エラー ページにリダイレクトする必要があります。どうすればこれを設定できますか?

また、サーバーマシンのWindowsユーザーの名前ではなく、ログインしているユーザーの名前をすべてのページに表示したいと考えています。これを試してみましたSystem.property("user.name")が、これはサーバー名の Windows ユーザーの名前のみを返します。

4

2 に答える 2

4

サーブレットコンテナにいわゆる「LDAP レルム」を作成する必要があります。これを行う方法は、使用するサーブレットコンテナによって異なります。使用されているサーブレット コンテナに関する詳細を提供していないため、適切な回答を提供することは困難ですが、一般的には、レルム構成に関するサーブレット コンテナのドキュメントを読むだけで十分です。たとえば Tomcat の場合、それはRealm Configuration HOW-TOです。Tomcat の場合、JNDIRealm. 詳細については、JSP wikiを参照してください。

<security-constraint>次に、 で適切なエントリを宣言して、特定のページへのログインを要求するように Web アプリケーションを構成する必要がありますweb.xml。ログインページとエラーページは<login-config>、まったく同じ の entry で構成できますweb.xml

<security-constraint>
    <web-resource-collection>
        <web-resource-name>secured</web-resource-name>
        <url-pattern>/secured/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>X</role-name> <!-- Should be your AD group name. -->
    </auth-constraint>
</security-constraint>

<login-config>
    <auth-method>FORM</auth-method>
    <form-login-config>
        <form-login-page>/login.xhtml</form-login-page>
        <form-error-page>/error.xhtml</form-error-page>
    </form-login-config>
</login-config>

ログインフォームは POST し、入力フィールド名としてandj_security_checkを使用する必要があります。j_usernamej_password

<form action="j_security_check" method="post">
    <input type="text" name="j_username" />
    <input type="password" name="j_password" />
    <input type="submit" value="login" />
</form>

検証をよりきめ細かく制御し、JSF などを使用したい<h:inputText required="true" />場合は、バッキング Bean アクション メソッドにサブミットすることもできますHttpServletRequest#login()j_security_check を使用した Java EE / JSF でのユーザー認証の実行も参照してください。

ログインしたユーザーの名前を取得するにはExternalContext#getRemoteUser()、JSF コンテキストまたはHttpServletRequest#getRemoteUser()サーブレット コンテキストで使用します。次のように、JSF EL でアクセスできます。

<p>Welcome, #{request.remoteUser}</p>

システム プロパティは実際にサーバー自身のユーザーを返しますが、このコンテキストではまったく意味がありません。

于 2012-06-19T15:07:56.090 に答える
0

oVirtのオープン ソース プロジェクトをご覧になることをお勧めします。GWT に基づく webadmin と、認証プロトコルとして Kerberos を使用して LDAP サーバーに対して認証を実行する REST-API Web アプリケーションがあります (SIMPLE 認証もサポートしています)。

ここでは、私たちが何をしているかについて一般的に説明しますが、コードを見てください。

  • Kerberos へのログイン操作を実行するためにJAAS + を使用します ( KDC などをKrb5LoginModule介して Kerberos 関連の情報を設定するか、krb5.conf ファイルを使用する必要があります)。System.setProperties

  • ログインが成功したら、PrivilegedAction(JAAS API を参照)を実行します。

  • 私たちPrivilegedActionはGSSAPIを使用し(これはKerberos用です。代わりにSIMPLEを使用することもできます)、ログインが成功した結果として適切な資格情報を持っています.

この時点で、LDAP サーバーと KDC の両方として機能する Active-Directory に対して認証されます。

このソリューションはコンテナに依存せず、単純なスタンドアロン Java プログラムからでも機能します (もちろん、適切な JAAS conf ファイルを定義する必要があります。JBoss AS 7.1.x を使用している場合は、私たちが行っているように、standalone.xmlこの問題を処理します)

コードは にovirt-engine/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbrokerあり、git clone で oVirt から取得できます。

于 2012-06-19T15:21:22.747 に答える