2011-10-25 2 views
4

EJB 프로젝트에서 "javax.ejb.SessionContext"의 호출 명칭을 대체해야합니다. Jboss AS 6.0 Final을 애플리케이션 서버로 사용합니다.커스텀 프린시 펄은 Jboss AS의 EJB SessionContext에 전달되지 않습니다

UsernamePasswordLoginModule을 확장하고 사용자 지정 주체를 추가 한 사용자 지정 UserLoginModule을 정의했지만 사용자 지정 주체가 EJB SessionContext로 전파되지 않습니다.

@Override 
protected Group[] getRoleSets() throws LoginException { 

    Group[] groups = new Group[2]; 
    groups[0] = new SimpleGroup("Roles"); 
    groups[0].addMember(createRoleIdentity()); 

    Group callerPrincipal = new SimpleGroup("CallerPrincipal"); 
    callerPrincipal.addMember(createIdentity(this.getUsername())); 
    groups[1] = callerPrincipal; 
    subject.getPrincipals().add(callerPrincipal); 

    return groups; 
} 

@Override 
protected Principal createIdentity(String username) throws LoginException { 
    return new MyCustomPrincipal(username); 
} 

} 

내 사용자 정의 로그인 모듈이 잘 작동하지만, 내가 "javax.ejb.SessionContext"에서 얻을 호출자 주체가 여전히 SimplePrincipal입니다 : 여기

내 사용자 정의 로그인 모듈에서 일부 코드입니다.

IT는 Jobss 버그가 있다고 밝혀졌다 : EJBContext.getCallerPrincipal()를 정의 주요 https://issues.jboss.org/browse/JBAS-8427

과 관련된 항목에 반환하지 않습니다 : http://community.jboss.org/thread/44388에게.

Jboss가 작성한 기본 보안 주체를 바꾸는 것이 안전할까요? 그 부작용이 있습니까?

+0

이 여전히 보스 7 솔루션에 –

답변

3

내 팀의 도움을 받아 해결책을 얻었으니 동일한 문제가있는 사람들에게 도움이되기를 바랍니다. 대신

는 "sessionContext.getCallerPrincipal()" 를 사용하여 사용자 지정 주체를 얻기 위해 다음 :

 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()) { 

           Principal principal = (Principal) members.nextElement(); 
           return principal; 

         } 
        } 
       } 
      } 
     } catch (PolicyContextException e1) { 
      ... 
     } 
+0

축하에 문제가 될 것으로 보인다. 당신이 할 수있을 때, 당신의 대답을 '수락'으로 표시하여 다른 사람들이 당신의 성공에서 배울 수 있도록하십시오. 건배 ~ –