Spring 3.0.3とSpring Securityを使用しています。
そのため、作成しているアプリにはかなりゆるい制限があります。アプリを表示するために、ユーザーがログインして認証を受けることができることを確認したいだけです。このアプリの潜在的なすべてのユーザーにロールを付与したくありません(数万に及ぶ可能性があります)。
したがって、使用しても問題ありません。
<security:intercept-url pattern="/**" access="isFullyAuthenticated()" requires-channel="https"/>
しかし、必要に応じてユーザーがアプリを使用できないように制限できるようにしたいので、問題が発生しているユーザーにロールを割り当てられることを期待して、ROLE_BANNEDというロールを作成しました。
だから、今私はこれを試しています:
<security:intercept-url pattern="/**" access="isFullyAuthenticated() and not hasRole('ROLE_BANNED')" requires-channel="https"/>
これは最初は機能するように見えましたが、拒否されたページをロードできません。拒否されたページへのアクセスが制限されていると思います。拒否されたページをコントローラーから、またはWEB-INFのjspとしてロードできません。
認証されたユーザーにすべてのアプリへのアクセスを許可し、特定のロール(ROLE_BANNED)を持つユーザーを拒否されたページに送信する方法を誰かに教えてもらえますか?
編集ここに私の全体のセキュリティがあります:httpセットアップ:
<security:http auto-config="true" access-denied-page="/denied" entry-point-ref="casAuthenticationEntryPoint" use-expressions="true">
<security:intercept-url pattern="/**" access="isFullyAuthenticated() and not hasRole('ROLE_BANNED')" requires-channel="https"/>
<security:intercept-url pattern="/denied" access="IS_AUTHENTICATED_FULLY" filters="none" />
<security:logout logout-url="/logout" logout-success-url="${cas.logoutUrl}" />
<security:session-management session-fixation-protection="none" />
<security:custom-filter after="CAS_FILTER" ref="casAuthenticationFilter"/>
<security:custom-filter before="CHANNEL_FILTER" ref="channelProcessingFilter" />
<security:port-mappings>
<security:port-mapping http="80" https="443" />
</security:port-mappings>
</security:http>
コントローラーにマップされた拒否ページ(/ denied)、jspページ(/denied.jsp)、さらに単純なhtmlページ(/denied.html)を使用してみましたが、1つ1つにつき404が表示されます。これが発生しても、ログファイルに何も表示されません。
私は次のようにしてしまいました:
<security:intercept-url pattern="/**" access="isFullyAuthenticated()" requires-channel="https"/>
<security:intercept-url pattern="/banned" access="isFullyAuthenticated() and hasRole('ROLE_BANNED')" requires-channel="https"/>
どちらの場合もログインする必要がありますが、禁止されたページにアクセスするには禁止されたロールが必要です。
また、RequestController.GETを使用してすべてのコントローラーメソッドの前に実行するアスペクトを追加しました。このアスペクトは、ユーザーがBANNEDロールを持っているかどうかを確認し、持っている場合は/ bannedにリダイレクトします。
これを行うためのより良い方法を誰かが知っている場合は、回答を追加してください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加