1

私のコントローラー:

@RequestMapping("/createchar")
@PreAuthorize("hasRole('ROLE_USER')")
public String createCharacter(Map<String, Object> map, Principal principal) {

spring-security.xml

<global-method-security pre-post-annotations="enabled"
    proxy-target-class="true" />
...
<intercept-url pattern="/game*" access="ROLE_USER" />
    <form-login login-page="/account/login" ...

アプリケーションを再デプロイした後でも、ページは常に読み込まれます。ログインすらしていません。ログインページにリダイレクトされないのはなぜですか?

さらに情報が必要な場合は、お気軽にお問い合わせください。

4

3 に答える 3

2

インターンシップに参加していたとき、私は同じ問題に直面しました。私とチームメイトは、Spring Security のソース コードをクランチするのに 2 日かかりました。しかし、今日、例外がまったく見られない理由は、前述の「OP メカニズム」にあるとのことでした。その理由は、プロキシ クラスを作成する必要があるためです。

Spring Proxy Mechanisms したがって、特定の状況で行う必要があるのは、

<aop:config proxy-target-class="true" />

app-servlet.xml に

コードをデバッグして、Spring によって呼び出されるメソッドを探す場合、同様の問題を解決することもできますが (実際の原因は異なる可能性があるため)、忍耐力が必要な大きな課題です。

これがあなたや他の人に役立つことを願っています。

于 2013-08-02T16:11:32.767 に答える
2

コントローラー Bean は通常、サーブレット コンテキスト内に存在するため、AOP 宣言の影響も、ルート アプリケーション コンテキストの Bean ポスト プロセッサの影響も受けません。

Spring Framework の applicationContext.xml と spring-servlet.xml の違い

コントローラークラスをプロキシすることは良い考えではないと思います。インターフェイスを実装するコントローラーで @Controller を使用する Spring-MVC の問題を参照してください。つまり、ルート アプリケーション コンテキストの Bean です。

この場合、Web ページに対してインターセプト URL アプローチを使用する必要があります。

于 2012-12-29T11:07:09.857 に答える