2012-03-18 6 views
3

私は、次の突堤のセットアップを持っている:私はMavenの突堤プラグイン経由で組み込みのJetty 7.6.1.v20120215を使用していますJAAS:!roleを使用してログインすると、エラーはどうなりますか?

<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> 

私が持っているフォームからログインしようとすると、ログインフィールドは/ j_security_checkに正しく​​送信されます。私は呼び出された独自のLoginModuleを作成し、ユーザを適切に検証します。彼らのプリンシパルがデータベースから正しくフェッチされているのがわかります。代わりに、保護されたページを示されているの

は、桟橋は私を示しています

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メッセージに関する助けをいただければ幸いです。

答えて

1

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

コミット・フェーズでは、JAASログイン・モジュールは、件名プリンシパルにユーザー・ロールを追加することが予想されます。ロールは、jetty.xmlファイルでJettyに指定するプリンシパルを拡張するクラスに保持されます。あなたは、モジュールがcommit()

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


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

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

RolePrincipalにこのような何かを持っている必要がありますログイン

+0

事があります - - 私のログインモジュールは実際にこれらの役割の主体を主語に追加しています。ユーザーは実際にそのプリンシパルを持っています。その他のヒント? – carlspring

+0

あなたのrealm名は、jetty-web.xmlとweb.xmlで正確に一致していますか(上記のコードではそうではありません)。あなたの役割は何ですか? JaasRoleインスタンス?なぜ 'roleClassNames'のjetty.xmlに3つのクラスを宣言するのですか?ログインモジュール構成ファイルでdebug = trueを指定してログを監視しようとしましたか? –

+0

私は自分自身でLoginModuleとRoleを実装しています。レルムはweb.xmlとjettyの両方の設定ポイントで正しいです。私は、ログインモジュールがユーザーを正しく検証しており、その役割をサブジェクトにコミットしていることがわかります。エラーメッセージは、ロールがどこかに見つからないことを意味するように見えます。 – carlspring

2

自分の役割のクラスである私は同じエラーを持っていたし、コードの上 ....既に存在だったが、読んだ後: http://wiki.eclipse.org/Jetty/Tutorial/JAAS は、私はまた、ウェブ-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からアプリを移動していた)

+0

こんにちはDavor、login.RolePrincipal用のテンプレートを送ることができますか?私は自分のアプリケーションに埋め込み掲示板を実装しようとしています。 –

関連する問題