我是Spring Security的新手。我一直致力于创建一个自定义选举器,根据对象的属性值决定是否授予权限。也就是说,如果对象实例A具有值为i的属性X,则具有ROLE_MGR的用户具有访问权限。如果对象实例B在X属性中具有值j,则ROLE_MGR不具有访问权限。是否有可能这样做,如果是这样,我需要做什么?如果这是不可能的,我们可能决定不使用Spring Security。是否可以使用对象的属性值来决定访问权限?
0
A
回答
0
我想通了。我需要使用自定义权限评估程序。从我的代码摘录以下提供的人可能会试图做同样的事情:
的security.xml
<security:global-method-security
pre-post-annotations="enabled">
<security:expression-handler ref="expressionHandler" />
</security:global-method-security>
<bean id="expressionHandler"
class="org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler">
<property name="permissionEvaluator">
<bean id="permissionEvaluator"
class="org.krams.tutorial.infrastructure.SomePermissionsEvaluator" />
</property>
</bean>
服务接口 @PostFilter( “调用hasPermission(filterObject, '读')”) public List getAll();
自定义权限计算器
@Override
public boolean hasPermission(Authentication authorities,
Object targetDomainObject, Object permission) {
boolean Decision = false;
System.out.println("Initial Decision: " + Decision);
Date cutoffDate = null;
try {
cutoffDate = new SimpleDateFormat("MMMM d, yyyy", Locale.ENGLISH)
.parse("January 1, 2012");
System.out.println("Cutoff Date: " + cutoffDate.toString());
} catch (ParseException e) {
e.printStackTrace();
}
System.out.println("Domain Object Date: "
+ Post.class.cast(targetDomainObject).getDate());
if (Post.class.cast(targetDomainObject).getDate().before(cutoffDate)) {
Decision = false;
System.out.println("In before");
} else {
Decision = true;
System.out.println("In after");
}
System.out.println("Final Decision: " + Decision);
System.out.println("--------");
return Decision;
}
0
这可能,但首先看看Spring Security的域对象安全。这是用来授予细粒度访问你的对象,看到这里:http://static.springsource.org/spring-security/site/docs/3.0.x/reference/domain-acls.html
+1
我已经阅读了acl的文档,并没有指定我如何根据域对象的属性的值作出决定。 – chanakya2 2012-03-21 16:42:15
+0
我同意,OP希望基于域对象属性的值而不是域对象本身进行保护。 – 2016-05-27 04:31:48
相关问题
- 1. 是否可以从其属性访问父对象?
- 2. 我们是否可以使用具有访问权限权限的algolia搜索
- 3. 使用对象访问属性值
- 4. 自己可以用来访问对象属性吗?
- 5. 没有管理员权限的用户是否可以管理配置单元中的对象访问权限?
- 6. 属性对象是否可以到达它属于的对象?
- 7. 是否可以确定通过哪个对象访问对象?
- 8. 是否可以访问不是对象属性的方法变量?
- 9. 当使用JSON定义的函数时,是否可以使用相对语法来访问JSON属性?
- 10. 我可以使用属性来确定对象的类吗?
- 11. 访问对象是另一个对象的属性 - 使用Javascript
- 12. 如何解决“权限被拒绝访问属性”调用“”?
- 13. 是否可以访问刚指定的属性?
- 14. 是否可以获取对象的属性和关联属性?
- 15. 是否有可能使用ID访问对象的所有属性?
- 16. 可以访问ActiveRecord对象,但不能访问其属性
- 17. 我可以使用C#中的对象名称访问对象属性吗?
- 18. 拒绝访问属性权限的Java
- 19. 是否可以使用PHP访问Linux中的COM对象?
- 20. 对象的不可访问属性
- 21. Django模板翻译 - 是否可以使用对象属性
- 22. 访问者是否可以修改它所访问的对象
- 23. 对象的访问属性
- 24. 如何使用另一个对象的属性值来访问一个JavaScript对象的属性
- 25. Mongoose - 是否可以通过模式路径访问对象属性?
- 26. 访问对象属性使用符号
- 27. 使用jquery访问“Request”对象属性
- 28. 如何启用Java对象来访问Spring属性值?
- 29. 如何解决“权限被拒绝访问属性文档'”?
- 30. 如何解决“权限被拒绝访问属性'提醒'”?
的确是这样,但你到底是在实施它有什么样的问题?这看起来非常简单。 – Simeon 2012-03-21 12:28:40
我正在使用自定义选举器(实现AccessDecisionVoter),但是没有办法获取域对象。我如何检查自定义选举器中域对象的属性值,还是需要查看另一个接口/类来自定义? – chanakya2 2012-03-21 16:45:40
我认为你需要更多地解释“对象”。它在哪里以及如何确定要访问哪个实例?这似乎基本上就是答案所在。如果它无法从投票人那里获得(例如通过注入一个DAO),那么你需要解释为什么。 – 2012-03-21 17:32:41