1

私はSpring MVCを使用しており、構築する必要のあるカスタム認証/セキュリティシステムを持っています。

NOTE:  I know of spring security, but my requirements were to do this in a custom way so please not looking for suggestions about using spring's security modules.

ユーザーがシステムにログインすると、セッション Cookie が作成されます。ユーザーがページにアクセスすると、インターセプターはその Cookie の存在を探し、mysql でセッション GUID を検索し、存在する場合はデータをロードしてリクエストの属性に保存します。

ユーザーがログインする必要があるページの場合、コントローラー レベルでアクセスを制限するにはどうすればよいですか?

インターセプターでこれを行うことができます:

if url.contains("projects/") ...

ProjectController でログインしているユーザーのみにアクセスを制限したいが、これは本当にやりたいことではありません。

しかし、コントローラーレベルで追加できる注釈を探しているか、ログインユーザーを必要とするすべてのコントローラーが継承する BaseController を何らかの方法で作成しています。

このようなものに対する私のオプションは何ですか?

ASP.NET で baseController を作成し、コントローラーにはイベント サイクルがあり、アクション実行前のイベントで、ユーザーがログインしているかどうかを確認しました。

spring mvc の提案をお探しですか?

アップデート

たとえば、ASP.NET には 2 つのメソッドがあり、1 つはコントローラーのアクション メソッドの直前に起動し、もう 1 つは直後に起動します。

Controller.OnActionExecuting 
Controller.OnActionExecuted

http://msdn.microsoft.com/en-us/library/system.web.mvc.controller.onactionexecuting.aspx

したがって、OnActionExecuting では、要求 URL を調べてから文字列比較を実行して特定のコントローラーであるかどうかを確認するのではなく、自分がどのコントローラーにいるのか、どのアクションがプログラムによって呼び出されようとしているのかを実際に正確に確認できます。 .

したがって、このイベントでは、Cookie やリクエスト属性などを簡単に確認できます。

これははるかに安定した方法ですが、春には似たようなものがありますか?

4

2 に答える 2

2

コントローラーレベルでこれが必要な場合は、次のことができます。

1) コントローラ メソッド シグネチャでjava.security.Principalパラメータを宣言し、Spring がPrincipalオブジェクトを入力します。または

2) PermissionEvaluatorを実装します。これは、 @PreAuthorizeアノテーションを使用してコントローラー メソッドで呼び出すことができ、 Authenticationオブジェクトにアクセスできます。

于 2012-04-09T18:47:47.957 に答える
0

ASP.NET で行ったことと同様に、Spring アプリケーション コンテキストOncePerRequestFilter内にあるフィルターのチェーンを利用してチェーンすることができます。web.xmlこのフィルターの良い点は、使用する MVC アプローチとは無関係であり、「ベース コントローラー」が必要ないことです。

一方、Spring セキュリティ モジュールも使用している場合は、カスタム フィルター構成を使用して、本来あるべき正しい場所に配置できます。

チェックが失敗した場合は、おそらく例外を発生させるか、ユーザーを正しいナビゲーションにリダイレクトする必要があります。

最後のコメントに基づいて、マップされたインターセプターも使用できます。

<mvc:interceptors>
    <mvc:interceptor>
        <mapping path="/myFirstPath/*"/>
        <mapping path="/mySecondPath/*"/>
        <bean class="org.example.SomeInteceptor" />
    </mvc:interceptor>
    <mvc:interceptor>another one</mvc:interceptor>
</mvc:interceptors>
于 2012-04-09T18:08:34.763 に答える