2014-01-08 4 views
0

CDI -> EJB 응용 프로그램이 있습니다. JBoss j_security를 ​​사용하여 과거에는 보안을 유지했습니다. 시로와의 내 보안이 작동합니다.Jboss EJB 및 Shiro

내 유일한 문제는 어떻게 얻을 수 있습니다 SessionContext 내 EJB에서? Jboss 보안을 사용하여 다음 위치에 로그인 한 사용자 이름이 있습니다.

SessionContext sessionContext; String email = sessionContext.getCallerPrincipal(). getName();

이제 EJB에서 사용자 이름을 가져 오려고합니다. SessionContext로 사용자 이름을 어떻게 설정할 수 있습니까?

도움이 조금 까다 롭습니다

답변

0

주셔서 감사합니다, 그것은 또한 당신이 사용하는 보스의 버전에 따라 달라집니다. AS 7.x 및 EAP 6.x 범위에서는 몇 가지 버그로 인해 공개 API를 사용하여이 작업을 수행 할 수 없습니다. 내가 여기에 예전처럼은 JBoss 특정 코드를 사용할 수있는 사용자 이름과 역할의 sessionContext 인식하게하기 위해

: https://github.com/javaeekickoff/jboss-as-jaspic-patch/commit/d691fd4532d9aeae6136e3adc2537ff81c525673

그것은 같은 것을해야한다;

SecurityContext context = SecurityActions.getSecurityContext(); 
context.getUtil().createSubjectInfo(new SimplePrincipal(userName), 
    null, 
    someSubject 
); 

someSubject 만들고 인구가되는 방법을 확인하기 위해 파일의 나머지 부분에서 살펴 보자.

불행히도 언급 한 JBoss 버전 @RolesAllowed은 JBoss가 로컬 호출자로부터 이미 인증 된 ID를 인계하지 않기 때문에 불행히도 작동하지 않을 것이지만, 실제 빈을 호출하기 직전에 항상 JBoss 관련 "보안 도메인"을 참조 할 것입니다. 물론 그것은 시로에 대해 아무것도 알지 못했다.