2010-08-22 3 views
19

로깅 목적으로, 현재 세션의 ID를 기록 된 라인에 자동으로 추가하는 로거를 만들고 싶습니다. 사용자가 getAuthentication() 반환 null 로그인하기 전에,스프링 보안으로 세션 ID 가져 오기

((WebAuthenticationDetails) SecurityContextHolder.getContext().getAuthentication().getDetails()) 
    .getSessionId() 

문제가 : 로그인 한 사용자의 경우
이 문제가되지 않습니다. 현재 응답이나 그 종류의 어떤 것도 참조하지 않고 세션 ID를 얻는 다른 방법이 있습니까?

감사합니다.

+0

이 질문은 내 질문에 대한 답변입니다. 감사. 질문하는 좋은 방법. – TRiNE

답변

43

당신이 봄의 RequestContextHolder에 의존

RequestContextHolder.currentRequestAttributes().getSessionId(); 

을 사용할 수 있습니다, 그래서는 스프링 MVC의 DispatcherServlet 사용되어야한다 또는 당신은 RequestContextListener 선언해야한다. 존재하지 않으면 세션도 생성됩니다.

+0

매력처럼 작동합니다! 감사! – abyx

+0

@axtavt diffrnt 포트에서 각도 어플리케이션을 실행 중이고 서버 코드가 diffrnt 포트에서 실행 중입니다. 내 서버 코드에서 스프링 보안을 구현하면 성공할 경우 다른 Java 컨트롤러로 리디렉션됩니다. 모든 사용자 역할 및 기타 정보를 래핑했습니다. 하지만 리디렉션 URL에 쿠키가 없기 때문에 'anonymusUser' 만 얻고 있습니다. 그건 당신의 해결책을 극복하는 것입니다 .. – SakthiSureshAnand

관련 문제