2012-01-19 3 views
6

정말 유연한 보안 프레임 워크 Apache Shiro를 발견했습니다. Shiro를 사용하여 인증 및 권한 부여를 성공적으로 구현했습니다.Apache Shiro의 인스턴스 수준 액세스 제어

프레임 워크의 매력적인 기능 중 하나는 인스턴스 기반 보안입니다. Shiro 웹 사이트에서 예제를 복사했습니다.

다음 사용 권한은 데이터베이스에 저장됩니다.

printer:query:lp7200 
printer:print:epsoncolor 

다음 코드는 주어진 프린터 인스턴스에 대해 현재 인증 된 사용자에게 권한이 있는지 확인합니다.

if (SecurityUtils.getSubject().isPermitted("printer:query:lp7200") { 
// Return the current jobs on printer lp7200 
} 

제 질문은 "사용 권한이 데이터베이스에 저장되는 방법입니까?"입니다. 인스턴스 기반 권한을 저장하는 더 좋은 방법이 있습니까?

알려 주시기 바랍니다.

감사합니다.

답변

9

이 정보를 저장하는 방법은 전적으로 귀하에게 달려 있습니다. Realm 구현은 사용중인 데이터 소스를 쿼리하고 선호하는 형식으로 권한 데이터를 추출합니다.

일부 사용자는 예를 들어 표시된 것과 같이 문자열로 직접 저장하고, 다른 사용자는 전용 테이블 (예 : permission_type, target, action columns)에 전용 테이블 (예 : RDBMS를 사용하는 경우)에 저장합니다. 사용 권한 엔티티를 역할에 또는 사용자 또는 사용자에게 할당 된 그룹에 직접 연결할 수 있지만 응용 프로그램에는 의미가 있습니다.

귀하의 저장 옵션은 전적으로 귀하에게 달려 있습니다. Realm.isPermitted(...) 조작을 예상대로 수행하고자하지만 데이터를 구체화하십시오. 대신 직접 Realm.isPermitted(...) 방법을 구현하는

, 많은 사람들이 더 편리 추상 AuthorizingRealm 클래스를 서브 클래스 화해와 doGetAuthorizationInfo 방법을 무시하고 권한 표현을 지원 AuthorizationInfo 인스턴스를 반환하는 찾을 수 있습니다.

이 방법을 사용하면 데이터 저장소를 쿼리하고 AuthorizationInfo 인스턴스로 데이터를 변환 할 수 있으며 작업이 완료됩니다 (권한 부여 캐싱을 설정하는 것을 잊지 마십시오 - 큰 성능 이점이 있음). 당신은 쿼리를 통해 매우 구체적인 제어하려는 경우 RealmisPermitted 방법을 재정의

에만 필요