저는 스프링 시큐리티를 처음 접했습니다. 나는 개체의 속성 값에 따라 권한을 부여할지 여부를 결정하는 사용자 정의 유권자를 만드는 작업을 수행하고 있습니다. 즉, 객체 인스턴스 A의 값이 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, '읽기')") 공개 목록 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. PropertyPath 클래스를 사용하여 개체의 속성 값을 가져 오는 방법이 있습니까?
- 2. 프로그래밍 방식으로 SharePoint 개체의 유형을 결정할 수 있습니까?
- 3. 개체의 속성 값을 알지 못하고 개체의 속성 값을 가져 오는 중입니까?
- 4. 속성을 사용하여 객체 클래스를 결정할 수 있습니까?
- 5. 리플렉션을 사용하여 기본 클래스에서 속성 이름과 값을 가져올 수 있습니까?
- 6. 속성 이름을 바꾸고 여러 개체의 값을 변경하십시오.
- 7. 개체의 속성 이름에 액세스
- 8. doctype을 자동으로 결정할 수 있습니까?
- 9. 표현 트리를 사용하여 개체의 모든 속성 비교
- 10. 비즈니스 개체의 속성 혜택?
- 11. 어떻게 파이썬에서 클래스 속성 액세스를 무시할 수 있습니까?
- 12. JSP EL이 속성 액세스를 직접 수행 할 수 있습니까
- 13. @Embedded에서 속성 액세스를 사용할 수 없습니다.
- 14. AutoMapper 세 번째 개체의 속성 값을 기준으로 대상의 속성 값을 확인합니다.
- 15. xpath를 사용하여 속성 이름의 값을 설정할 수 있습니까?
- 16. 개체의 모든 속성 및 하위 속성 찾기
- 17. SpecFlow에서 태그를 사용하여 사용할 적절한 환경을 결정할 수 있습니까?
- 18. RhinoMocks에서 Expect.Call 중에 object의 속성 값을 설정할 수 있습니까?
- 19. 뮤텍스를 보유하고있는 스레드를 결정할 수 있습니까?
- 20. 사용 된 Geolocation 방법을 결정할 수 있습니까?
- 21. 개체의 속성 국제화
- 22. 메뉴 바가있는 화면을 어떻게 결정할 수 있습니까?
- 23. 리플렉션을 사용하여 속성 값을 비교하는 이상한 결과
- 24. 주사위 합계 확률을 어떻게 결정할 수 있습니까?
- 25. 대괄호를 사용하여 클래스에서 값을 가져올 수 있습니까?
- 26. 하나의 속성 값을 다른 속성 값에 사용할 수 있습니까?
- 27. Silverlight 개체의 원본 속성
- 28. 개체의 속성 이름 정보
- 29. 조건부로 개체의 속성 삭제
- 30. 개체의 중복 된 속성
,하지만 문제를 정확하게 당신이 그것을 구현 예 그것이가 있습니까? 이것은 꽤 똑바로 보인다. – Simeon
커스텀 유권자 (AccessDecisionVoter 구현)를 사용하고 있었지만 도메인 객체를 획득 할 방법이 없습니다. 맞춤 유권자의 도메인 개체 속성 값을 확인하려면 어떻게해야합니까? 또는 맞춤 설정을 위해 다른 인터페이스/클래스를 조사해야합니까? – chanakya2
"개체"에 대해 좀 더 설명해야한다고 생각합니다. 그것은 어디에 있고 어떻게 액세스 할 인스턴스를 만들었습니까? 그것은 본질적으로 해답이있는 곳인 것처럼 보입니다. 유권자가 DAO를 주입하여 액세스 할 수 없다면 그 이유를 설명해야합니다. –