2013-09-10 42 views
10

Hiện tại tôi đã có ứng dụng Swing và tôi không thể tích hợp Apache Shiro để xác thực và ủy quyền quyền đối với một số vai trò nhất định. Tôi đã quản lý để đọc những người dùng từ tệp shiro.ini mà tôi đã tạo để thử nghiệm, trông giống như sau:Apache Shiro - sử dụng cơ sở dữ liệu để đọc người dùng, vai trò và quyền

[users] 
admin = 123456, Administrator 

[role] 
Administrator = *:*:* 

Tuy nhiên, đây chỉ là để thử nghiệm, bây giờ tôi cần đọc giấy phép từ một cơ sở dữ liệu vì vậy tôi đã lưu trữ trong cơ sở dữ liệu một bảng với thông tin tôi cần và có dạng như sau:

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

Tôi đã cố gắng hiểu các hướng dẫn sử dụng một lĩnh vực JDBC, tuy nhiên họ sử dụng web các ứng dụng hoặc khung công tác đặc biệt để quản lý kết nối của chúng với Cơ sở dữ liệu như Apache Derby hoặc BoneCP và chúng gây nhầm lẫn cho tôi nhiều hơn với các ví dụ these. Vì vậy, những gì tôi hỏi là làm thế nào tôi cần phải cấu hình tập tin shiro.ini nếu tôi muốn sử dụng một lĩnh vực JDBC (với một cơ sở dữ liệu Oracle) và những gì các lớp shiro.ini cần. Bất kỳ ví dụ hoặc giải thích sẽ được đánh giá cao!

+0

Trước khi tôi thử câu trả lời, bạn có biết cách sử dụng JDBC và bạn có hiểu cơ sở dữ liệu quan hệ không? –

+0

@BalusC không phải là THEY, tôi đã nói các ví dụ trực tuyến, vâng chúng khá đơn giản, bất cứ khi nào bạn sử dụng tệp .ini để nhận vai trò và giấy phép người dùng, nhưng không khi nào bạn muốn lấy thông tin này từ cơ sở dữ liệu quan hệ – Nivde

+0

@SotiriosDelimanolis I ' m không phải là một chuyên gia, nhưng với sự hiểu biết của tôi, JDBC đó là một giao diện lập trình ứng dụng cho phép bạn thực hiện các hoạt động trên cơ sở dữ liệu từ ngôn ngữ Java – Nivde

Trả lời

8

Giao diện Realm là một thành phần an ninh

có thể truy cập bảo mật ứng dụng cụ thể thực thể như người dùng, vai trò và quyền hạn để xác định xác thực và ủy quyền hoạt động.

Bạn có thể triển khai nó để tương tác với bất kỳ nguồn nào để tìm người dùng và quyền của họ. Nếu bạn muốn tương tác với một cơ sở dữ liệu dựa trên SQL, bạn có thể làm điều đó. Nếu bạn muốn tương tác với một tập tin văn bản, bạn có thể làm điều đó. Nếu bạn muốn tương tác với một dịch vụ web, bạn cũng có thể làm điều đó.

Có hai tiện ích mở rộng hữu ích (gần như cần thiết) là RealmAuthenticatingRealmAuthorizingRealm. Họ cung cấp một giao diện cho các dịch vụ xác thực và ủy quyền, tương ứng. AuthorizingRealm mở rộng AuthenticatingRealm. Bạn nên mở rộng AuthorizingRealm để triển khai logic xác thực và ủy quyền của riêng bạn.

Lấy một ví dụ: Bạn có một cơ sở dữ liệu với một bảng Accounts như

username | password | role 

một bảng Permissions như

permission_id | permission_name 

và một bảng Account_Permissions

username | permission_id 

Nói cách khác, an Account có thể có một vai trò, nhưng nhiều quyền. Với JDBC, bạn có thể dễ dàng truy vấn một cơ sở dữ liệu và truy xuất tên người dùng, mật khẩu, vai trò và quyền. Việc bạn triển khai AuthorizingRealm sẽ làm điều đó và xây dựng các đối tượng được mong đợi bởi API của Shiro.

Đọc this document trên trình tự xác thực của Shiro để biết vị trí của AuthenticatingRealm.

Đối với INIfile, tùy thuộc vào cách bạn thực hiện Realm của bạn, bạn sẽ cần phải khai báo nó như

myRealm = com.company.security.shiro.YourDatabaseRealm 

có thể thiết lập một số thuộc tính

myRealm.databaseName = account_database 

Shiro cung cấp lớp JdbcRealm riêng của mình mà mở rộng AuthorizingRealm. Lớp này đưa ra một số giả định về cấu trúc cơ sở dữ liệu của bạn, nhưng bạn có thể tùy chỉnh nó.

+0

Cuối cùng tôi phải sử dụng BoneCP để cung cấp một nguồn dữ liệu cho Shiro. một kết nối mà không phải sử dụng bất kỳ thư viện bên ngoài nào. Cảm ơn sự kiên nhẫn của bạn về việc giải thích nó Rất hữu ích và cuối cùng tôi đã cố gắng thực hiện Shiro và hiểu các khái niệm vì tóm tắt của bạn ở đây. – Nivde

+0

@ nivde92 Bạn được chào đón. Lưu ý rằng ở trên áp dụng bất kể 'DataSource' bạn sử dụng. Có hai lớp khác nhau mà chúng ta đang nói đến. –

+0

Bảng mẫu chỉ phản ánh quyền * * dựa trên người dùng, ** không ** * quyền dựa trên vai trò *. * Vai trò dựa trên * cũng thường ngụ ý rằng một chủ đề có thể có nhiều vai trò. –

Các vấn đề liên quan