0

URL リソースを保護するために SPRING URL セキュリティを使用しています。

  1. これは、デプロイメント記述子 (web.xml) で次のように構成されています。

     <filter>
     <filter-name>springSecurityFilterChain</filter-name>
     <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
     </filter>
    
     <filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/*</url-pattern>
     </filter-mapping>
    
  2. SPRING SECURITY XML 構成ファイルでの構成。

    <http use-expressions="true" auto-config="false" disable-url-rewriting="true" access-decision-manager-ref="urlSecurityAccessDecisionManager" > 
    <access-denied-handler ref="accessDeniedHandler" /> <!--if access is denied (false) I'll be redirected to some JSP-->      
    
    <intercept-url pattern="/getGroupMembers.action*" access="isAuthenticated() and    
        (request.getParameter('groupId')!= null ?
          amIAMemberOfThisGroup(request.getParameter('groupId')) : true)"/>
    
  3. amIAMemberOfThisGroup(int groupId) の実装は次のとおりです。

     public boolean amIAMemberOfThisGroup(int groupId) throws Exception {
          Group group = getEntityManager().find(Group.class, groupId);
          if (group == null) {
              throw new Exception("Group not found. Invalid Group Id:" + groupId + .");
          }
      //if logged in user is member of this group return true else false        
      }
    
  4. これは、true と false の両方の結果でうまく機能しています。 true-URL によって要求されたリソース/データが返されます false--accessDenied ページにリダイレクトされます。

    DB にグループが存在しない /getGroupMembers.action?groupId=678342 のような値を渡すと、groupId に対応してフェッチされたグループが null であるため、メソッドは適切に例外をスローします。しかし、私の Web アプリケーションは単に私を空白のページにリダイレクトします。アクセス チェックを実行するメソッドによって例外がスローされた場合に、一般的なエラー ページにリダイレクトできるように、URL セキュリティに不足している構成はありますか?

4

1 に答える 1

1

amIAMemberOfThisGroup の実装で、Exception の代わりに AccessDeniedException をスローしてみてください。AccessDeniedException がスローされた場合、ExceptionTranslationFilter は accesDeniedHandler のハンドル メソッドを呼び出します。

于 2013-11-07T09:31:31.273 に答える