2013-09-10 4 views
10

현재 스윙 앱을 보유하고 있으며 특정 역할에 대한 권한을 인증하고 위임하기 위해 Apache Shiro를 통합하지 않습니다. Apache Shiro - 데이터베이스를 사용하여 사용자, 역할 및 권한 읽기

[users] 
admin = 123456, Administrator 

[role] 
Administrator = *:*:* 

그러나 이것은 단지 테스트를 위해, 지금은 허가를 읽을 필요가 있었다 : 나는 이미 이런 식으로 뭔가를 보이는, 내가 테스트를 위해 만든 shiro.ini 파일에서 사용자를 읽기 위해 관리했습니다 데이터베이스에서 그래서 정보가있는 테이블은 내가 필요로하는 데이터베이스에 저장했는데 보인다 : 그러나 그들은 웹을 사용

users (id,password,username) 
userRoles (userId, role) 
rolePermission (permissionID,permission,roleID) 

가 나는 JDBC 영역을 사용하는 튜토리얼을 이해하려고 노력했습니다를 응용 프로그램 또는 특별 프레임 워크를 사용하여 Apache Derby 또는 BoneCP와 같은 데이터베이스에 대한 연결을 관리 할 수 ​​있으며 더 많은 것을 these 예제와 혼동 할 수 있습니다.

그래서 (Oracle 데이터베이스와 함께) JDBC 영역과 shiro.ini에 필요한 클래스를 사용하려면 shiro.ini 파일을 구성해야합니다. 모든 예제 또는 설명을 부탁드립니다!

+0

답변을 시도하기 전에 JDBC 사용 방법을 알고 있고 관계형 데이터베이스를 이해합니까? –

+0

@BalusC 사용자가 역할과 허가를 얻기 위해 .ini 파일을 사용할 때마다 온라인 예제를 예로 들었습니다. 예를 들어, 관계형 데이터베이스에서이 정보를 검색 할 때는 언제든지 – Nivde

+0

@SotiriosDelimanolis 저는 ' 전문가는 아니지만 JDBC를 이해하는 데는 Java 언어의 데이터베이스에서 작업을 수행 할 수있는 응용 프로그램 프로그래밍 인터페이스입니다. – Nivde

답변

8

Realm 인터페이스는 인증 및 권한 부여 작업을 결정하기 위해 사용자, 역할 및 권한으로 응용 프로그램 별 보안을 개체에 액세스 할 수있는

보안 구성 요소입니다.

사용자 및 권한을 찾을 수있는 모든 소스와 상호 작용하도록 구현할 수 있습니다. SQL 기반 데이터베이스와 상호 작용하려는 경우이를 수행 할 수 있습니다. 텍스트 파일과 상호 작용하고 싶다면 그렇게 할 수 있습니다. 웹 서비스와 상호 작용하려는 경우에도 그렇게 할 수 있습니다.

Realm의 유용한 (거의 필요한) 확장자는 AuthenticatingRealmAuthorizingRealm입니다. 이들은 각각 인증 및 권한 부여 서비스를위한 인터페이스를 제공합니다. AuthorizingRealmAuthenticatingRealm입니다. 사용자 고유의 인증 및 권한 부여 논리를 구현하려면 AuthorizingRealm을 확장해야합니다.

는 예를 가지고 : 당신은 테이블 AccountsPermissionsAccount_Permissions

username | permission_id 

permission_id | permission_name 

로하고 테이블 테이블

username | password | role 

등으로 데이터베이스를 가지고, Account은 하나의 역할을 가질 수 있지만 여러 사용 권한. JDBC를 사용하면 이러한 데이터베이스를 매우 쉽게 쿼리하고 사용자 이름, 암호, 역할 및 사용 권한을 검색 할 수 있습니다. AuthorizingRealm을 구현하면 Shiro의 API가 예상하는 개체가 생성됩니다.

AuthenticatingRealm의 출처를 이해하기 위해 Shiro의 인증 순서에 대해 this document을 읽으십시오.당신이 당신의 Realm을 구현하는 방법에 따라 INIfile에 관해서는

, 당신은 몇 가지 특성

가능
myRealm = com.company.security.shiro.YourDatabaseRealm 

설정으로 선언해야

myRealm.databaseName = account_database 

시로는 자신의 JdbcRealm 클래스를 제공하는 확장 AuthorizingRealm. 이 클래스는 데이터베이스의 구조에 대해 몇 가지 가정을하지만 사용자 정의 할 수 있습니다.

+0

결국 Shiro에 데이터 소스를 제공하기 위해 BoneCP를 사용해야했지만, 외부 라이브러리를 사용할 필요없이 연결. 그것을 설명해 주셔서 인내심을 가져 주셔서 감사합니다. 그리고 매우 도움이되었고 결국 Shiro를 구현할 수 있었고, 여기에 귀하의 간략한 내용으로 인해 개념을 이해할 수있었습니다. – Nivde

+0

@ nivde92 여러분을 환영합니다. 위의 내용은 여러분이 사용하는'DataSource'에 관계없이 적용됩니다. 우리가 이야기하고있는 두 가지 레이어가 있습니다. –

+0

예제 테이블은 ** 사용자 기반 * 권한 ** ** ** 역할 기반 * 권한 만 반영합니다. * 역할 기반 *은 일반적으로 주체가 여러 역할을 가질 수 있음을 의미합니다. –