gpt4 book ai didi

java - Spring Security @Postfilter 没有被触发

转载 作者:行者123 更新时间:2023-11-30 04:29:42 24 4
gpt4 key购买 nike

@Postfilter 没有被触发。

我的 Controller 中有两种方法。 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>

最佳答案

如果 list1 方法与 listJson 位于同一类/实例上,则当您处理类内的方法时,不会调用安全建议。

但是,如果您要将 list1 方法移动到注入(inject)的服务类,您将拥有一个遵守注释的建议对象。

编辑我想让这一点更清楚 - 所以我添加了一个图表,希望能够更清楚地解释这一点

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

/mapping -> Project.listJson(HttpServletRequest, HttpServletResponse) |
|
|
|
---------------------
| listJson |<--------------------------------|
| svc.list1 |--------->advised(Service) | run @PostFilter
| | | |
| | | list1 |
--------------------- | |
| |
--------------------- | |
| Service | | |
| list1 |<--------| |
| | |
| |---------------------------------|
---------------------

关于java - Spring Security @Postfilter 没有被触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14956648/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com