나는 webapp의 세션 관리 (현재 Catalina/Tomcat에서 처리)를 shiro 네이티브 세션 관리로 바꾸려고합니다.SessionListener의 Shiro HttpSession?
시로 웹 사이트에 의해 adverted 될 때 이것은 상당히 쉬운 일이 있어야한다:
투명 HttpSession을 지원 - 당신이 시로의 기본 세션을 사용하는 경우, 우리가 구현 한 HTTP 세션 API와 서블릿 2.5 API 이므로 기존 웹 코드를 변경하여 Shiro를 사용할 필요가 없습니다.
그래서 로컬 세션 관리자를 Shiro의 DefaultWebSessionManager
으로 교체하면 모든 것이 정상적으로 작동합니다.
특정 javax.servlet.http.HttpSessionListener
을 제외하고 내 webapp의 경우도 마찬가지입니다. 이 Listener는 Shiro의 세션 관리를 사용한 이후 더 이상 이벤트를 가져 오지 않습니다.
걱정할 필요가 없습니다. Shiro는 자체의 org.apache.shiro.session.SessionListener
인터페이스를 제공하며 세션 관리자에 연결할 수 있습니다.
그러나이 인터페이스는 javax.servlet.http.HttpSessionListener
과 많이 다릅니다. HttpSession
오브젝트가 더 이상 전달되지 않고 Shiro 리스너가 이벤트와 함께 자신의 org.apache.shiro.session.Session
오브젝트를 전달합니다.
내 기존 구현은 물론 HttpSession
개체로 작동합니다. 나는 시로 Session
가 HttpSession
로 변환 될 수 있다는 것을 발견 :
// HttpServletRequest currentRequest;
// ServletContext servletContext;
// Session session;
HttpSession httpSession = new ShiroHttpSession(session, currentRequest, servletContext);
는 그러나 시로
SessionListener
에서 HttpServletRequest의와의 servletContext을 액세서 할 수있는 방법이 없습니다.
모든 아이디어가이 문제를 해결하는 방법입니다 (예 : 이 두 가지 질문 중 하나에 대답 할 수 있습니까?
- 왜 더 이상 이전
javax.servlet.http.HttpSessionListener
라는입니까? - Shiro
Session
개체를HttpSession
shiroSessionListener
에있는 개체로 변환하려면 어떻게해야합니까?
Simpy 넣어, 내 이전 SessionListener의 모든 코드는 HttpSessions 함께 작동하도록 작성되었습니다. Shiro Session 객체를 모두 리팩터링하지 않고도이 코드를 재사용 할 수 있습니까? 이것은 꽤 많은 일이 될 것입니다. –
@KarstenDaemen 어떤 HttpSession 메소드를 사용하고 있습니까? Shiro의'Session'은 속성 setter와 getter를 가지고 있지만 분명 JSP와 그 밖의 것들에는 사용할 수 없습니다. –