2010-03-25 3 views
0

현재 자체 보안을 수행하고 EJB 관리 보안이없는 대규모 기존 EJB 1.1 응용 프로그램을 개발 중입니다.보안 제어 EJB 호출에 전달되는 원칙

작은 단계로 더 표준 솔루션으로 이동하려고합니다. 따라서 EJB에 전달되는 보안 원칙을 제어하기를 원합니다. 현재 로그인 또는 보안 프레임 워크를 변경할 수 없기 때문에 현재 JAAS로 이동할 수 있다고 믿지 않습니다.

일단 java.security.Principle을 만들면 어디에 저장해야합니까? 내 ejb 호출로 전달되고 context.getCallerPrincipal()에서 사용할 수 있습니까?

감사합니다.

+0

이 질문에도 관심이있을 수 있습니다. http://stackoverflow.com/questions/2487224/how-to-handle-dynamic-role-or-username-changes-in-jsf – ewernli

답변

3

Java EE 보안은 전혀 또는 전혀없는 것입니다. Java EE 인증 메커니즘을 사용하여 보안 컨텍스트를 올바르게 설정해야합니다. 보시다시피 주입을 통해 얻을 수있는 EJBContext은 읽기 전용입니다.

보안 컨텍스트를 변경하는 것을 알고있는 유일한 표준 방법은 @RunAs (an example 참조)과 같은 것이지만 매우 유연하지 않습니다. 자격 증명을 동적으로 전달할 수는 없습니다.

예를 들어 Glassfish가 ProgrammaticLogin 인 경우와 같이 휴대용이 아닌 컨테이너 별 메커니즘이 있습니다. 그러나이 경우에도 사용자 이름/암호를 전달해야하며 즉시 Principal을 변경할 수 없습니다.

컨테이너의 내부 API를 사용하여 보안 컨텍스트를 수동으로 설정하는 방법에 대해 설명하는 기사를 읽었지 만 이식성이없고 지원되지 않습니다.

+0

+1 감사합니다. 대답, 내가 듣고 싶었던 대답이 아닙니다. –

+0

> Glassfish에는 ProgrammaticLogin이 있습니다. 예를 들어, 웹 레이어의 경우 HttpServletRequest # login과 HttpServletRequest # authenticate에서 표준화되었습니다. 후자는 사용자 이름/암호가 필요하지 않습니다. 적합한 JASPIC 인증 모듈 (또는 독점권)과 결합하여 새 사용자를 인증 할 수 있으므로 신원을 변경할 수 있습니다. 웹 레이어에서 이것을 호출해야하며 순수 EJB에서만 작동하지 않습니다. –