2013-05-29 1 views
0

jboss를 7.1.1.Final로 사용 중이며 LdapExtLoginModule을 사용하여 보안 도메인을 구성했습니다. 지금까지 로그인이 작동합니다.Jboss7을 사용하여 SLSB의 호출자 역할에 액세스하십시오.

이제 SLSB에서 모듈에 의해로드 된 역할에 액세스하려고합니다. 사용자 이름에 액세스하는 방법을 알고 있습니다. 내 예제에서는 ejb 3.1을 사용하고 사용자 이름을 System.out에 인쇄합니다.

역할에 액세스하는 방법을 모르며 문서에서 아무 것도 찾지 못했습니다. EJBContext는 컨텍스트 자체가 역할을 알고 있지만 일련의 역할을 반환하는 메서드를 찾을 수 없음을 증명하는 isCallerInRole (String) 메서드를 제공합니다.

나는 LdapExtLoginModule을 확장하고 역할을 포함하는 사용자 정의 principal을 설정하는 사용자 정의 LoginModule을 작성할 수 있음을 알고 있습니다. 그러나 기존 기능을 사용하는 쉬운 방법이있을 수 있습니다. 아무도 그러한 접근법을 알고 있습니까?

SLSB 코드 :

@Stateless 
@Remote(IAService.class) 
public class AService implements IAService 
{ 

    @Resource 
    private EJBContext context; 

    @Override 
    public void printUserData() { 
     System.out.println("Name: " + context.getCallerPrincipal().getName()); 
     // TODO print roles 
    } 

} 

답변

4

아무도 지금까지 내 질문에 대답하지 않고 마침내 작업 솔루션을 가지고 있기 때문에 나는 지금 당신과 함께 공유됩니다

자바 EE API는 어떤 방법을 제공하지 않습니다 서버 독립적 인 방식으로 정보에 액세스하십시오. 그래서 사용자 정의 principal을 설정하는 로그인 모듈을 작성하는 방법을 시도했습니다. As it turns out this does not work either.

는 지금 발신자 역할을 얻기 위해 다음 코드를 사용하여이 질문에 대한 대답에서 영감 :

이 메소드에 의해 반환되는 Group
private Group getRoles() { 
    final Subject subject = (Subject)PolicyContext.getContext("javax.security.auth.Subject.container"); 
    final Set<Group> groups = subject.getPrincipals(Group.class); 
    for (final Group group : groups) { 
     if ("Roles".equals(group.getName())) { 
      return group; 
     } 
    } 
    throw new IllegalStateException("No roles group found"); 
} 

는 사용자 그룹의 이름을 Principals이 포함되어 있습니다. 이것은 로그인 모듈이 그룹의 이름 "롤"을 설정 한 JBoss에서만 작동합니다.