2011-07-18 52 views
17

Tôi đang làm việc với mô-đun thủy tinh và jaas.Glassfish 3.1 mặc định chính để ánh xạ vai trò

Tôi đã định cấu hình web.xml theo cách này.

<security-constraint> 
    <web-resource-collection> 
     <web-resource-name>ALL Page for admin</web-resource-name> 
     <url-pattern>/*</url-pattern> 
    </web-resource-collection> 
    <auth-constraint> 
     <role-name>user</role-name> 
    </auth-constraint> 
</security-constraint> 
<login-config> 
    <auth-method>BASIC</auth-method> 
    <realm-name>file</realm-name> 
</login-config> 
<security-role> 
    <description>Administrator</description> 
    <role-name>user</role-name> 
</security-role> 

Điều đó có nghĩa là tất cả người dùng muốn truy cập ứng dụng web của tôi đều phải là người dùng nhóm.

Sau đó, trên giao diện điều khiển glassfish tôi cần phải đánh dấu vào tùy chọn trong: Configuration -> Máy chủ-config -> bảo mật -> Default Principal Để Vai trò Mapping

Câu hỏi của tôi là lý do tại sao tôi cần phải đánh dấu này Mặc định Principal để Bản đồ vai trò? Và làm thế nào tôi có thể thay đổi web.xml của tôi để tránh đánh dấu nó?

Thanks a lot

Loic

Trả lời

37

Khi bạn xác định vai trò và vai trò trong web.xml bạn đang sử dụng bảo mật khai báo, trong đó chủ yếu dựa vào việc sử dụng JAAS để thực thi yêu cầu xác thực và ủy quyền theo quy định khai báo.

Các vai trò được chỉ định trong các bộ mô tả triển khai chỉ đại diện cho các vai trò được sử dụng trong ứng dụng. Các vai trò này không giống với vai trò trong cơ sở dữ liệu nhận dạng người dùng (hoặc vùng xác thực) được sử dụng trong thời gian chạy, và thường có thể khác nhau, để phát triển ứng dụng có thể đã được thực hiện mà không liên quan đến người dùng thực tế và các nhóm hiện diện trong cơ sở dữ liệu nhận dạng người dùng.

Thông thường ánh xạ được thực hiện giữa các vai trò khai báo được chỉ định trong web.xml và các hiệu trưởng hoặc nhóm hiện diện trong cơ sở dữ liệu nhận dạng người dùng bằng cách sử dụng bộ mô tả triển khai vùng chứa cụ thể. Trong Glassfish 3,1, điều này xảy ra là tệp glassfish-web.xml. Mỗi ánh xạ như vậy sẽ ánh xạ một vai trò khai báo trong ứng dụng, cho một hiệu trưởng hoặc một nhóm trong một lĩnh vực JAAS, theo cách sau trong glassfish-web.xml (đối với triển khai tệp WAR) hoặc glassfish-application.xml (đối với triển khai tệp EAR) hoặc glassfish-ejb-jar.xml (cho triển khai EJB tập tin JAR):

glassfish-web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd"> 
<glassfish-web-app error-url=""> 
... 
    <security-role-mapping> 
     <role-name>user</role-name> 
     <principal-name>Root</principal-name> <!-- Map a principal to the role 'user' --> 
     <group-name>Administrators</group-name> <!-- Map a group to the role 'user' --> 
    </security-role-mapping> 
... 
</glassfish-web-app> 

glassfish-application.xml

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE glassfish-application PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Java EE Application 6.0//EN" "http://glassfish.org/dtds/glassfish-application_6_0-1.dtd"> 
<glassfish-application> 
... 
    <security-role-mapping> 
     <role-name>user</role-name> 
     <principal-name>Root</principal-name> <!-- Map a principal to the role 'user' --> 
     <group-name>Administrators</group-name> <!-- Map a group to the role 'user' --> 
    </security-role-mapping> 
... 
</glassfish-application> 

glassfish-ejb-jar.xml

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE glassfish-ejb-jar PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 EJB 3.1//EN" "http://glassfish.org/dtds/glassfish-ejb-jar_3_1-1.dtd"> 
<glassfish-ejb-jar> 
... 
    <security-role-mapping> 
     <role-name>user</role-name> 
     <principal-name>Root</principal-name> <!-- Map a principal to the role 'user' --> 
     <group-name>Administrators</group-name> <!-- Map a group to the role 'user' --> 
    </security-role-mapping> 
... 
</glassfish-ejb-jar> 

Các mô tả trên bản đồ một vai trò user đến một Principal đậm đà bản sắc cá nhân của tên Root và cho một nhóm người dùng với tên Administrators trong lĩnh vực. Bạn có thể bỏ qua một trong các ánh xạ này và chỉ giữ lại vai trò đối với ánh xạ chính hoặc vai trò đối với ánh xạ nhóm. Bạn cũng có thể có nhiều hiệu trưởng được ánh xạ tới cùng một vai trò hoặc nhiều nhóm được ánh xạ tới cùng một vai trò hoặc thậm chí nhiều hiệu trưởng và nhóm được ánh xạ tới cùng một vai trò.Điều quan trọng là hiểu khái niệm về các hiệu trưởng và các nhóm trong các lĩnh vực JAAS - một hiệu trưởng đại diện cho danh tính của một Subject (người dùng đăng nhập vào ứng dụng) trong hệ thống, và nó có thể là một nhận dạng cá nhân (một người dùng duy nhất).) hoặc nhận dạng nhóm (nhóm người dùng). Bằng cách ánh xạ các vai trò khai báo cho các hiệu trưởng hoặc nhóm thực tế, người ta có thể thực thi các quy tắc được chỉ định trong web.xml đối với bất kỳ cơ sở dữ liệu nhận dạng người dùng nào (ví dụ: bất kỳ lĩnh vực nào) và có thể làm như vậy mà không có bất kỳ thay đổi nào trong codebase; sau khi tất cả, một thay đổi như vậy sẽ yêu cầu tái lập bản đồ các vai trò khai báo cho tập hợp các hiệu trưởng và các nhóm mới, trong một lĩnh vực có thể khác nhau. Bạn có thể tìm thấy một hướng dẫn cơ bản về cách bảo mật Java EE và JAAS làm việc cùng nhau trong the chapter on security in the Java EE 6 tutorial.

Glassfish cho phép lược đồ ánh xạ đơn giản, nơi không cần thực hiện ánh xạ cho tất cả các vai trò khai báo trong bộ mô tả triển khai vùng chứa cụ thể (trong trường hợp này là glassfish-web.xml), miễn là tên của các vai trò khai báo diễn ra tương tự như tên của các hiệu trưởng hoặc các nhóm. Đây là mặc định chính cho lược đồ ánh xạ vai trò. Có vẻ như trong trường hợp của bạn, các hiệu trưởng/nhóm trong lĩnh vực của bạn giống như vai trò khai báo được chỉ định trong web.xml và do đó bạn sẽ tránh ánh xạ vai trò cho hiệu trưởng và nhóm một cách rõ ràng. Nói cách đơn giản hơn, nếu vai trò user giống như một hiệu trưởng user hoặc một nhóm người dùng user trong lĩnh vực JAAS của bạn (và tương tự cho các nhận dạng khác), thì bạn có thể sử dụng vai trò mặc định cho lược đồ ánh xạ chính của Glassfish. vai trò trong tệp web.xml của bạn.

Nếu bạn muốn tránh đánh dấu tùy chọn triển khai mặc định chính để ánh xạ vai trò, thì bạn phải cung cấp vai trò cho chính/nhóm lập bản đồ trong mô tả triển khai vùng chứa cụ thể như bạn thường làm cho các máy chủ ứng dụng khác.

Bạn có thể đọc thêm về chủ đề này trong one of the posts on blogs.oracle.com that describes this feature of Glassfish.

+0

Cảm ơn câu trả lời của bạn. Trên thực tế những gì tôi muốn làm là có một nhóm được gọi là người dùng. Và mọi người dùng đều là một phần của nhóm này. Nó có nghĩa là tất cả mọi người có một tài khoản từ ứng dụng của tôi (nó là một cuộc chiến) có thể kết nối bằng cách sử dụng một mật khẩu và một người sử dụng. Sau đó, sau khi tôi tự mình quản lý, ai có thể truy cập nội dung trong ứng dụng. – user789148

+0

Nếu tôi sử dụng mã bạn đưa cho glassfish-web.xml. Tôi nhận được lỗi sau khi cố gắng để conenct vào ứng dụng của tôi. Truy cập vào tài nguyên được chỉ định (Truy cập vào tài nguyên được yêu cầu đã bị từ chối) đã bị cấm. Nó thậm chí không cho tôi màn hình đăng nhập – user789148

+0

Xin lỗi. Ok, tôi hiểu rồi. Tôi chỉ cần thêm ánh xạ từ người dùng của tôi và nó hoạt động :) THanks rất nhiều bạn đá – user789148

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