JSFアプリケーションのセキュリティを処理するためにSpringを使用しています。にログインページが/login
あり、Springを次のように構成しました。
<http authentication-manager-ref="authenticationManager">
<intercept-url pattern="/login" access="IS_AUTHENTICATED_ANONYMOUSLY" />
<intercept-url pattern="/admin" access="ROLE_ADMIN" />
<intercept-url pattern="/javax.faces.resource/**" access="IS_AUTHENTICATED_ANONYMOUSLY" />
<intercept-url pattern="/**" access="ROLE_ADMIN,ROLE_USER" />
<form-login login-page="/login" authentication-failure-url="/login" />
<logout logout-url="/logout" />
</http>
の管理ページを、その役割/admin
を持つユーザーだけが利用できるようにしたい。ROLE_ADMIN
ユーザーはROLE_ADMIN
、ROLE_USER
アプリケーションルートから始まるページにアクセスできます。
どちらかの役割を持つユーザーでログインすると、ログイン後に表示されるはずのページが表示されます。ただし、次のアクションが何であれ、/login
ログインしていないようにリダイレクトされます。これを1日機能させようとしているので、誰かに説明してもらえますか。Spring 3.1.xのドキュメントを読んでいますが、問題を解決する方法についての手がかりが得られません。ちなみにSpring3.1.1.Releaseを実行しています。
追加のボーナス情報:ログイン後に表示されるページには、ユーザーが持っている場合にのみレンダリングされる要素がありますROLE_ADIN
。ログイン後にその要素を見ることができます。PrettyFacesを実装したときに問題が始まりました。私は一般的な問題をWebで検索しましたが、PrettyFacesフィルターがSpringセキュリティフィルターの後に表示されるはずだと思いついただけです。これは事実なので、正しく機能するはずですか?
更新:式を使用するように構成を更新しました。ただし、問題はまだ存在します。
<http authentication-manager-ref="authenticationManager" use-expressions="true">
<intercept-url pattern="/login" access="permitAll" />
<intercept-url pattern="/admin" access="hasRole('ROLE_ADMIN')" />
<intercept-url pattern="/javax.faces.resource/**" access="permitAll" />
<intercept-url pattern="/**" access="hasAnyRole('ROLE_ADMIN','ROLE_USER')" />
<form-login login-page="/login" authentication-failure-url="/login" />
<logout logout-url="/logout" />
</http>
ログイン直後にFirebugのコンソールに出力します(ページはAJAX呼び出しを試みます):