私はSpring Securityの初心者です。私は、オブジェクトの属性の値に基づいて許可を与えるかどうかを決定するカスタムの投票者を作成する作業を行っています。つまり、オブジェクトインスタンスAの値XがXの属性Xを持つ場合、ROLE_MGRを持つユーザーはアクセス権を持ちます。オブジェクトインスタンスBがX属性に値jを持つ場合、ROLE_MGRにはアクセス権がありません。そうすることが可能かどうか、もしそうなら、私は何をする必要がありますか?これが不可能な場合は、Spring Securityを使用しないことにします。オブジェクトの属性値を使用してアクセスを決定することはできますか?
答えて
私はそれを理解しました。カスタムの権限評価ツールを使用する必要があります。私のコードからの抜粋は、類似した何かをしようとしているかもしれない人のための下に提供されています
の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、 'READ')") 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;
}
これは可能ですが、まずSpring Securitysドメインオブジェクトセキュリティを見てください。これは、あなたのオブジェクトにきめ細かなアクセスを許可するために使用されます。http://static.springsource.org/spring-security/site/docs/3.0.x/reference/domain-acls.html
私はすでにaclのドキュメントを読んできましたが、ドメインオブジェクトの属性の値に基づいてどのように決定できるかは指定されていません。 – chanakya2
私は同意します、OPは、ドメインオブジェクトのプロパティ自体の値ではなく、ドメインオブジェクトのプロパティの値に基づいて保護します。 –
- 1. 「属性」にアクセスするとき、Javascriptオブジェクトの値は未定義ですか?
- 2. 属性を使用してメソッドをオーバーライドすることはできますか?
- 3. modelformset_factoryを使用してオブジェクトの属性にアクセスする
- 4. jQueryを使用して別の属性の値に基づいて属性を設定できますか?
- 5. cheerioを使用してオブジェクト内の属性の値にアクセスする方法
- 6. xpathを使用して属性名の値を設定できますか?
- 7. JOLTを使用してJSON属性の値を連結することはできますか?
- 8. Laravel 5.2 |カスタム置き換え決してフライでCalculcated値で属性を設定することは
- 9. XPathを使用して特定の属性の属性値を取得する
- 10. CSSを使用して、HTMLタグのユーザー定義属性を対象にすることはできますか?
- 11. C++クラスの属性として__m128変数の内部値にアクセスすることはできますか?
- 12. Wix属性の値としてユーザー指定の値を使用します。
- 13. 属性を使用してCOM列挙型フィールド名を指定することはできますか?
- 14. Leaflet.jsでcenter属性とbounds属性を同時に使用することはできますか?
- 15. どのように文字列を使用してsqlalchemyオブジェクト属性を表すことができますか?
- 16. 属性パラメータとしてデリゲートを使用できますか?
- 17. オブジェクトの属性にアクセスすると、Djangoはデータベースにアクセスしますか?
- 18. thymeleafでオブジェクトの属性の属性にアクセスする方法は?
- 19. SVGオブジェクトのカスタム属性を文字列ではなく数値として設定できますか?
- 20. javascriptのCSS属性値をレールで使用できますか?
- 21. miパッケージを使用して帰属ランダム効果モデル推定値をプールすることはできますか?
- 22. JQueryのライブクエリを使用してアクセスすると、未定義の属性
- 23. XSLT - すべてのXML属性値を特定の属性値と照合して置き換えます
- 24. CSS:スタイリングにIMG Alt属性を使用することはできますか?
- 25. JQueryと$(this)を使用して属性にアクセスする
- 26. IoTAgentULを使用して属性の値を正しくタイプすることができません
- 27. 属性のすべての属性と値をフィルタリングします。
- 28. XPATHを使用して属性値をスクレイプしますか?
- 29. XMLで属性にアクセスすることができません
- 30. sql vbaアクセスを使用して属性を結合します。
はい、それはですが、あなたはそれを実装するには、正確にどのような問題を持っていますか?これはかなりまっすぐに見えます。 – Simeon
私はカスタム投票者(AccessDecisionVoterを実装しています)を使用していましたが、ドメインオブジェクトを取得する方法はありません。どのようにカスタムの投票者のドメインオブジェクトの属性値をチェックすることができますか、カスタマイズするために別のインタフェース/クラスを調べる必要はありますか? – chanakya2
「オブジェクト」についてもう少し説明する必要があると思います。それはどこにあり、あなたはどのインスタンスにアクセスするのですか?それは本質的に答えがどこにあるのかと思われます。有権者からアクセスできない場合(DAOを注入するなど)、その理由を説明する必要があります。 –