2017-03-09 5 views
0

User、Authorの3種類のユーザーロールを持つアプリケーションがあります。& Admin。各アクセスロールには、異なる一連のメニューと画面があります。Springアプリケーションで特権エスカレーションを処理する方法

私たちが管理者のURLをキャプチャし、そのページを開く前にユーザのログインにそれを通過すると、メニュー項目は非表示になります。ページ上のすべてのアクションは機能しませんが、まだページのオープンを制限する予定です。

私たちがどのように処理できるかを見るには、ページを開く前にアクセスを検証するために各アクションに条件を書き込んでください。しかし、このアプローチでは、多くのファイルに触れる必要があります。この状況を処理する最善の方法はありますか?

私たちのアプリケーションはSpring MVCフレームワークを使って書かれています。

ありがとうございました。

答えて

0

あなたは尋ねた:

をしかし、このアプローチでは、我々は多くのファイルに触れる必要があり、このような状況を処理するための任意の最良の 方法があります。

javadocHandlerInterceptor Spring MVCのから:

「アプリケーションでは、各ハンドラを変更することなく、共通 の前処理動作を追加するためのハンドラの特定のグループのための既存またはカスタム インターセプタ、の任意の番号を登録することができます 実装。 "

あなたが行うことは何210

  • HandlerInterceptorAdapterを拡張する必要がありますカスタムHandlerInterceptorを書きます。
  • boolean preHandle()メソッドをオーバーライドします。このメソッドは、ハンドラが呼び出される直前に呼び出されます。したがって、ログインしたユーザーのアクセスを確認できます(おそらくセッションから)。このメソッド内からカスタム応答を記述することができます。
  • dispatcher-servlet.xmlにインターセプタを登録してください。たとえば、

public class AuthInterceptor extends HandlerInterceptorAdapter { 

    @Override 
    public boolean preHandle(HttpServletRequest request, 
          HttpServletResponse response, 
          Object handler) throws Exception { 

     String uri = request.getRequestURI(); 
     User user = (User) request.getSession().getAttribute("foo"); //for example 

     if (...) {  //check access to this uri, if access fails 
      response.sendRedirect("/to/some/url"); 
      return false; 
     } 
     return true; 
    } 
} 

そしてdispatcher-servlet.xmlにこのHandlerInterceptorを登録します。

<mvc:interceptors> 
    <bean class="your.package.AuthInterceptor"/> 
</mvc:interceptors> 

あなたはより多くのURL、具体的には、このインターセプタを設定することができます。 Spring ReferenceおよびSpring javadocを参照してください。

関連する問題