2010-11-30 2 views
3

주체를 추출 할 수 있도록 JAAS 프레임 워크에서 현재 권한 실행을 실행중인 주체를 검색하려고합니다. 기본적으로 권한 실행이 실행 권한을 가진 주체에 의해 실제로 실행된다는 것을 런타임에 확인해야합니다.런타임시 java.security.PrivilegedAction을 실행하는 주체 검색

다르게 말하자면, 현재의 LoginContext를 런타임에 새로운 종류의 시스템 속성으로 가져올 수 있습니까? 이렇게하면 쉽게 주제를 추출 할 수 있습니다.

답변

0

여러분은 이러한 메커니즘을 직접 관리해야한다고 생각합니다. 예를 들어, 이것이 한 번 인증 한 다음 인증을 세션과 연관시키는 웹 응용 프로그램 인 경우입니다. 세션에 LoginContext을 저장합니다. 코드의 다른 부분에서 사용할 수있게하는 한 가지 트릭은 모든 스레드 호출 (예 : 요청)의 시작/끝에서 설정/해제하는 스레드 로컬 래퍼를 만드는 것입니다.

public class LoginContextHolder { 

    private static ThreadLocal<LoginContext> ctx = new ThreadLocal<LoginContext>(); 

    public static void set(LoginContext lc) { 
     ctx.set(lc); 
    } 

    public static LoginContext get() { 
     return ctx.get(); 
    } 

} 


public class LoginContextFilter implements Filter { 

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) { 

     LoginContext ctx = null; 
     HttpSession sess = (HttpSession)((HttpRequest)request).getSession(false); 
     if (sess != null) { 
      ctx = (LoginContext)sess.getAttribute("ctx"); 
     } 

     try { 
     LoginContextHolder.set(ctx); 
      chain.doFilter(request, response); 
     } finally { 
     LoginContextHolder.set(null); 
     } 

    } 


} 
+0

할 수 있습니다. 그것은 조금 놀랍다. – user525742

+0

나는 그들이 그 양상을 사용자에게 완전히 맡긴다 고 생각한다. LoginContext를 생성 할 때의 의미는 완전히 응용 프로그램에 따라 다르다. 모든 소켓이 사용자 이름/암호 로그인 페이지에 다시 연결될 때 발생하는 X.509 SSL 인증서 인증을 갖는 것은 매우 다르다. –

3

정말로 LoginContext가 필요합니까?

그냥 (연결된 모든 주체와) 제목 필요한 경우

, 당신은 예,이 내가 자신을해야 할 일이라고 생각하기 시작했다

Subject activeSubject = Subject.getSubject(AccessController.getContext()); 
관련 문제