2013-08-27 4 views
0

내 응용 프로그램 계층에서 메소드 서명을 단순화하기 위해 어떤 사용자가 로그인했는지 알고 싶습니다. 예를 들어 메소드 (소유자, 객체)가 단순히 메소드 (객체) 일 수 있습니다. 스프링을 내 응용 프로그램 계층에서 없애고 싶기 때문에 보안을 위해 스프링 보안을 사용합니다. 그래서 그 목적을 위해 별도의 계층 (DTO 변환)이 있습니다 - 외관 (응용 프로그램 서비스 용 어댑터)과 같습니다.응용 프로그램 계층의 세션 기능은 무엇입니까?

스프링을 사용하지 않고 응용 프로그램 계층에서 사용자 컨텍스트를 인식하도록 만드는 방법은 무엇입니까?

답변

1
등록해야

a를 HttpSession에서 모양과, 사용자가 로그인 한 경우, 일부 staticThreadLocal 맥락에서 User 표현의 어떤 종류를 저장할 것 Filter 또는 HandlerInterceptor. 모든 클래스는 User 개체가 포함 된이 정적 인 ThreadLocal에 액세스 할 수 있습니다.

사용자가 로그 아웃하거나 세션이 만료되면이 개체를 제거해야합니다. 힌트 : HttpSessionListener.

+0

[this] (https://wiki.openclinica.com/doku.php?id=developerwiki:interceptor)와 같은 것을 의미합니까? – kboom

+0

@Kboom 유사합니다. 그러나이 솔루션을 사용하면'HttpServletRequest' 또는'HttpSession' 객체를 전달해야합니다. 대신'정적 ThreadLocal'에 등록해야합니다.이 클래스는 동일한 'Thread'에있는 모든 클래스에서 액세스 할 수 있습니다. [도움이 될 수도] (http://stackoverflow.com/questions/2784009/why-should-java-threadlocal-variables-be-static). –

+0

아니면 SecurityContextHolder.getContext()를 해당 스레드 로컬에 바인딩하는 것이 훨씬 쉬울까요? 내가 틀렸다면 제발 제발. 나는 가장 간단한 해결책을 찾고있다. :). – kboom

관련 문제