Cuối cùng, hãy làm việc này. Tùy chỉnh Principal
s có thể được tạo trong JBoss AS. Nó là đủ với việc tạo ra một lớp thực hiện java.security.Principal
và thêm thuộc tính tùy chỉnh và getters/setters.
Sau đó, khi cấu hình các module đăng nhập (ví dụ DatabaseServerLoginModule) một mô-đun-tùy chọn trong các tập tin đăng nhập-config.xml chỉ cần thêm một lựa chọn principalClass
:
<application-policy name="my-security-domain">
<authentication>
<login-module code="org.jboss.security.auth.spi.DatabaseServerLoginModule" flag="required">
<module-option name="principalClass">com.custom.security.MyCustomPrincipal</module-option>
...
Bây giờ vấn đề là do một lỗi đang tồn tại trong JBoss, một cuộc gọi đến một tiêm EJBContext.getCallerPrincipal()
sẽ không trả về Hiệu trưởng tùy chỉnh mà là một thể hiện đơn giản của SimplePrincipal! Nhưng tin tốt là điều này có thể được giải quyết bằng mã JAAS sau đó cho phép kiểm tra các thông tin xác thực EJB container:
try {
Subject subject = (Subject) PolicyContext.getContext("javax.security.auth.Subject.container");
Set<Group> subjectGroups = subject.getPrincipals(Group.class);
Iterator<Group> iter = subjectGroups.iterator();
while (iter.hasNext()) {
Group group = iter.next();
String name = group.getName();
if (name.equals("CallerPrincipal")) {
Enumeration<? extends Principal> members = group.members();
if (members.hasMoreElements()) {
context = members.nextElement();
myCustomPrincipal = (MyCustomPrincipal) context;
}
}
}
} catch (PolicyContextException e) {
....
}
tôi quấn mã trên trong một POJO mà tôi có thể tiêm trong EJB của tôi để có được những Hiệu trưởng tương tự như lớp EJBContext.
Nguồn
2011-11-26 00:32:49