4

次の Jetty セットアップがあります。

<New class="org.eclipse.jetty.plus.jaas.JAASLoginService">
    <Set name="Name">FOO JAAS Realm</Set>
    <Set name="LoginModuleName">foo</Set>
    <Set name="roleClassNames">
        <Array type="java.lang.String">
            <Item>foo.jaas.principal.UserPrincipal</Item>
            <Item>foo.jaas.principal.RolePrincipal</Item>
            <Item>org.eclipse.jetty.plus.jaas.JAASRole</Item>
        </Array>
    </Set>
</New>

Maven Jetty プラグインを介して Embedded Jetty 7.6.1.v20120215 を使用しています。

持っているフォームからログインしようとすると、ログイン フィールドが適切に /j_security_check に送信されます。ユーザーを適切に呼び出して検証する独自の LoginModule を作成しました。プリンシパルがデータベースから適切に取得されていることがわかります。

セキュリティで保護されたページが表示される代わりに、Jetty は次のように表示します。

HTTP ERROR 403

Problem accessing /foo/auth.html. Reason:

    !role

それが本当に何を意味するのか、私にはよくわかりません。

web.xml に次のものがあります。

<security-constraint>
    <web-resource-collection>
        <web-resource-name>ADMINISTRATOR</web-resource-name>
        <url-pattern>/auth.html</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>ADMINISTRATOR</role-name>
    </auth-constraint>
</security-constraint>

<login-config>
    <auth-method>FORM</auth-method>
    <realm-name>foo</realm-name>
    <form-login-config>
        <form-login-page>/login.html</form-login-page>
        <form-error-page>/authfail.html</form-error-page>
    </form-login-config>
</login-config>

<security-role>
    <role-name>ADMINISTRATOR</role-name>
</security-role>
<security-role>
    <role-name>USER</role-name>
</security-role>

管理者としてログインしています。

Jetty によって表示される不可解な JAAS メッセージに関するヘルプをいただければ幸いです。

4

2 に答える 2

2

同じエラーが発生し、上記のコードは既に存在していました....しかし、読んだ後: http://wiki.eclipse.org/Jetty/Tutorial/JAAS web-jetty.xml も更新して追加する必要がありました

<Set name="roleClassNames">
   <Array type="java.lang.String">
      <Item>login.RolePrincipal</Item>
   </Array>
</Set>

このセクションで:

<New class="org.eclipse.jetty.plus.jaas.JAASLoginService">

ロール「login.RolePrincipal」にカスタムメイドのプリンシパルを使用したため(実際にはコードを継承し、アプリをTomcatからjettyに移動していました:))

于 2012-09-11T12:21:47.333 に答える
1

ログインしているユーザーには、/auth.html で強制するロール ADMINISTRATOR がありません。

コミット フェーズ中に、JAAS ログイン モジュールはユーザー ロールをサブジェクト プリンシパルに追加する必要があります。ロールは、jetty.xml ファイルで Jetty に示すプリンシパルを拡張するクラスで保持されます。

ログインモジュールには次のようなものが必要ですcommit()

    Set<Principal> subjectPrincipals = subject.getPrincipals();


    //add the roles
    for (String role : userRolesList) {

         subjectPrincipals.add(new RolePrincipal(role));
    }

RolePrincipalあなたの役割クラスは

于 2012-03-20T16:54:05.713 に答える