2010-12-02 4 views
1

ThreadLocal 맵에 주제 클래스를 저장하여 권한 부여 및 인증 솔루션을 실험하고 있습니다. 디자인은 API를위한 것이므로 관련 서블릿에 액세스 할 수 없으며 EJB3을 사용해야합니다 (따라서 CDI은 옵션이 아닙니다). 나는 당신이 일을 끝낼 후 각 요청이 ThreadLocal를지도를 청소 염치 EJB3EJB3에서 ThreadLocal 변수를 사용할 때의 고유 한 위험 요소는 무엇입니까?

  1. 와 ThreadLocal를 사용하는 방법에 대한 몇 가지 질문을 가지고, 무 상태 세션 빈과 ThreadLocal 변수를 사용하여 어떤 위험이있다? 즉, 두 개의 요청이 같은 스레드에 동시에 액세스하는 위험이 있습니까?

  2. 서블릿을 완료 한 후에 ThreadLocal을 지우는 방법이 있습니까? 인터셉터에 대해 살펴 보았지만 EJB3에서 제대로 작동하지 않으며 다른 응용 프로그램 서버에서도 다양하게 작동한다는 것을 이해했습니다. 다른 방법이라도?

답변

0

내 자신의 질문에 대답하려면 아니오, 어떤 보안이있는 것은 아닙니다. threadlocal 변수를 사용하면 전체 프로세스를 제어 할 수 있지만 CDI och JSP를 사용하여 요청 로컬 변수를 유지할 수 있습니다.

비록 모두 대답했습니다.

0

EJB 컨테이너에서 ThreadLocal을 사용하지 않는 것이 좋습니다. 권한 부여 및 인증은 교차 관심사이며 AOP와 같은 것을 개인적으로 사용합니다 (예 : 스프링 보안이이를 처리하는 방법).

+0

AOP가 내가 필요한 것을 어떻게 제공하는지 이해할 수는 없지만, 요청을 통해 값 (예 : 제목)을 어떻게 공유합니까? – mikek

+0

AOP는 필요한 시점에 주입합니다. 수동으로 직접 처리하는 것과는 다른 패러다임입니다. 개요는 http://static.springsource.org/spring-security/site/docs/3.0.x/reference/springsecurity.html을 참조하십시오. –

+0

고마워, 내가 보게. – mikek

2

Martin의 대답에 대해서는 Spring Security 자체가 기본적으로 ThreadLocal (SecurityContextHolder)을 사용한다는 점에 유의할 필요가 없으므로 EJB 호출을 통해 생존하기 위해 보안 컨텍스트가 필요한 경우이를 사용하는 데주의해야합니다. 물론 원격 호출을 통해 작동하지 않습니다. 그것은 지역 사람들과 함께할지 모르지만 나는 어떤 보장이 있다고 생각하지 않습니다.

일반적으로 스프링 시큐리티를 사용할 때 EJB를 피하고 POJO 미들 티어를 연결하고 AOP를 통해 트랜잭션 경계 설정과 같은 서비스를 제공하기 위해 스프링 프레임 워크를 사용합니다. 보안 컨텍스트는 스레드가 전체 호출에서 동일하게 유지되므로 중간 계층에서 사용할 수 있습니다.

+0

OP에서 언급했듯이 기술 변경은이 경우에는 옵션이 아닙니다. 두려워요./나는이 문제에 대해 EJB가 붙어 있습니다. – mikek

관련 문제