我是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. 屬性對象是否可以到達它屬於的對象?
- 3. 是否可以訪問不是對象屬性的方法變量?
- 4. 當使用JSON定義的函數時,是否可以使用相對語法來訪問JSON屬性?
- 5. 如何解決「權限被拒絕訪問屬性」調用「」?
- 6. 訪問對象是另一個對象的屬性 - 使用Javascript
- 7. 是否可以訪問剛指定的屬性?
- 8. 是否可以獲取對象的屬性和關聯屬性?
- 9. 是否有可能使用ID訪問對象的所有屬性?
- 10. 我可以使用C#中的對象名稱訪問對象屬性嗎?
- 11. 可以訪問ActiveRecord對象,但不能訪問其屬性
- 12. 是否可以使用PHP訪問Linux中的COM對象?
- 13. Django模板翻譯 - 是否可以使用對象屬性
- 14. 訪問者是否可以修改它所訪問的對象
- 15. 對象的訪問屬性
- 16. 如何使用另一個對象的屬性值來訪問一個JavaScript對象的屬性
- 17. 如何啓用Java對象來訪問Spring屬性值?
- 18. 訪問對象屬性使用符號
- 19. 如何解決「權限被拒絕訪問屬性'提醒'」?
- 20. 權限被拒絕訪問屬性'Arbiter'
- 21. reCAPTCHA權限被拒絕訪問屬性
- 22. 是否可以在javascript中將對象的屬性值設置爲對象?
- 23. 是否可以在內容屬性的值中使用CSS自定義屬性?
- 24. 是否可以使用KVO訪問代理對象的前一個/當前值?
- 25. 角$ rootScope對象屬性不可訪問
- 26. 是否可以在ant中指定屬性值作爲屬性?
- 27. 可以用wso2 siddhi CEP接受用戶定義的對象流嗎?該規則是否可以指定訪問該對象的屬性?
- 28. NSUserDefaults是否可以使用自定義對象來保存NSArray?
- 29. Javascript - 訪問對象屬性
- 30. LuaInterface:訪問對象屬性
的確是這樣,但你到底是在實施它有什麼樣的問題?這看起來非常簡單。 – Simeon 2012-03-21 12:28:40
我正在使用自定義選舉器(實現AccessDecisionVoter),但是沒有辦法獲取域對象。我如何檢查自定義選舉器中域對象的屬性值,還是需要查看另一個接口/類來自定義? – chanakya2 2012-03-21 16:45:40
我認爲你需要更多地解釋「對象」。它在哪裏以及如何確定要訪問哪個實例?這似乎基本上就是答案所在。如果它無法從投票人那裏獲得(例如通過注入一個DAO),那麼你需要解釋爲什麼。 – 2012-03-21 17:32:41