1

@Postfilter がトリガーされていません。

私のコントローラーには2つの方法があります。listJson メソッドは list1 メソッドを呼び出してすべてのプロジェクトを取得し、それらを json 形式で返します。プロジェクトをフィルタリングするための list1 メソッドに @Postfilter があり、フィルターがトリガーされていません。

問題は構成ではありません。テスト目的のため、 @Postfilter を listJson メソッドに配置してみましたが、トリガーされます。この件で私を助けていただけますか?私は非常に感謝されます。

    @RequestMapping(produces = "application/json")
    @ResponseBody
    public String listJson(HttpServletRequest request, HttpServletResponse response) {

    List<Project> items = list1(request, response, Project.class);
    return JsonHelper.toJsonArray(items, request.getContextPath());
    }

    @PostFilter("hasPermission(filterObject, 'read')") 
    private List<Project> list1(HttpServletRequest request, HttpServletResponse response, Class<Project> clazz) {
     Integer[] ia = WebHelper.getDojoGridPaginationInfo(request);
     Integer firstResult = ia[0];
     Integer lastResult = ia[1];

     Entry<String, String> orderBy = WebHelper.getDojoJsonRestStoreOrderBy(request.getP arameterNames());
     Where where = WebHelper.FromJsonToFilterClass(request.getParamet er("filter"));
     List<Project> items = JpaHelper.findEntries(firstResult, lastResult - firstResult + 1, orderBy, where, clazz);
     Integer totalCount = JpaHelper.countEntries(where, clazz).intValue();

     WebHelper.setDojoGridPaginationInfo(firstResult, lastResult, totalCount, response);

     return items;
     }

webmvc-config.xml

      <security:global-method-security pre-post-annotations="enabled" proxy-target-class="true">
      <security:expression-handler ref="expressionHandler"/>
      </security:global-method-security> 

       <bean id="myPermissionEvaluator" class="org.springframework.security.acls.AclPermis sionEvaluator">
        <constructor-arg ref="aclService" />
        </bean>

        <bean id="expressionHandler" class="org.springframework.security.access.express ion.method.DefaultMethodSecurityExpressionHandler" >
        <property name="permissionEvaluator" ref="myPermissionEvaluator"/>
        </bean>
4

1 に答える 1

2

list1 メソッドが listJson と同じクラス/インスタンスにある場合、クラス内のメソッドを扱っているため、セキュリティ アドバイスは呼び出されません。

ただし、list1 メソッドを注入されたサービス クラスに移動した場合は、アノテーションを尊重する推奨オブジェクトが得られます。

編集これをより明確にしたかったので、うまくいけばこれをより明確に説明する図を含めています

/mapping -> Project.listJson(HttpServletRequest, HttpServletResponse) |
                                                                      |
                                                                      |
                                                                      |
                                                            ---------------------
                                                            | listJson          |
                                                            |                   |---------|
                                                            |                   |         |
                                                            |                   |         | list1
                                                            |                   |         |
                                                            |                   |         |
                                                            |                   |         |
                                                            |                   |         |
                                                            |  list1            |<--------|
                                                            |                   |
                                                            |                   |
                                                            ---------------------

/mapping -> Project.listJson(HttpServletRequest, HttpServletResponse) |
                                                                      |
                                                                      |
                                                                      |
                                                            ---------------------
                                                            | listJson          |<--------------------------------|
                                                            | svc.list1         |--------->advised(Service)       | run @PostFilter
                                                            |                   |         |                       |
                                                            |                   |         | list1                 |
                                                            ---------------------         |                       |
                                                                                          |                       |
                                                            ---------------------         |                       |
                                                            | Service           |         |                       |
                                                            | list1             |<--------|                       |
                                                            |                   |                                 |
                                                            |                   |---------------------------------|
                                                            ---------------------
于 2013-02-19T11:48:48.720 に答える