Shiro의 SecurityUtils.getSubject()
이 작동하는 것을 이해하는 기본적인 방법은 현재 실행중인 스레드에 바인딩 된 제목을 반환한다는 것입니다. 그러나 이것은 요청을 처리하기 위해 스레드 풀을 사용하는 Tomcat과 같은 서블릿 컨테이너와는 다소 차이가 있습니다.다중 스레드 환경에서 Shiro
Tomcat이 ThreadA를 사용하여 요청을 처리한다고 말하면 SecurityUtils.getSubject()
을 호출하면 정상적으로 작동합니다. 그러나 ThreadB가 선택 되 자마자 사용자는 손실되고 getSubject
은 null을 반환하고 isAuthenticated는 이제 false입니다. 사용자가 아직 로그인되어 있어도 마찬가지입니다.
본인의 애플리케이션에서이를 확인했습니다. 나는 Shiro Core 1.2를 사용하고 있는데, 내 앱을 탐색 할 때 내 사용자가 단지 기적적으로 인증을받지 못한다는 것을 알 수 있습니다. 로그를 보면 다른 스레드가 요청을 처리하는 즉시 문제가 발생합니다.
그래서 Shiro가 잘못 구성 되었습니까? '현재 사용자'가 현재 스레드보다 좀 더 오랫동안 지속되어야하는 것처럼 보입니다. 세션 기반이 될 것으로 기대합니다. 나는 Shiro가 세션 관리 기능을 가지고 있지만, 발견 한 모든 예제에서 ThreadContext를 보는 getSubject
을 호출하여 현재 사용자를 얻는다 고 말합니다. 내가 놓친 게 있니?
감사합니다. 답장을 보내 주셔서 감사합니다. –
'SecurityUtils.getSubject()'에 대해 몇 가지 질문이 있습니다. Tomcat 컨테이너에 스레드 풀이 있기 때문에 하나의 스레드가 다중 주제에 바운드 될 수 있습니까? – znlyj