Shiro SessionContext和SessionKey的设计概念
SessionContext

其行为有:

DefaultSessionContext

其主要是实现了SessionContext的行为,MapContext主要是实现了Map的行为

WebSessionContext

其主要行为是,继承了SessionContext,拥有了后者的行为

DefaultWebSessionContext

其主要实现了WebSessionContext的行为和RequestPairSource的行为

RequestPairSource

其主要行为就是获得Request和Response,但是该行为WebSessionContext也具备了,有点冗余
HttpServletRequest的获取
创建SessionContext时会将HttpServletRequest设置到DefaultWebSessionContext中,通过后者获得
HttpServletRequest request = WebUtils.getHttpRequest(context);
WebUtils
public static HttpServletRequest getHttpRequest(Object requestPairSource) { ServletRequest request = getRequest(requestPairSource); if (request instanceof HttpServletRequest) { return (HttpServletRequest) request; } return null; } public static ServletRequest getRequest(Object requestPairSource) { if (requestPairSource instanceof RequestPairSource) { return ((RequestPairSource) requestPairSource).getServletRequest(); } return null; }
SessionKey
其行为有

DefaultSessionKey

其主要是实现了SessionKey的行为
WebSessionKey

其主要是实现了RequestPairSource的行为,又继承了DefaultSessionKey拥有了后者的行为
创建WebSessionKey时,将HttpServletRequest设置到WebSessionKey中
ServletRequest request = WebUtils.getRequest(context); ServletResponse response = WebUtils.getResponse(context); SessionKey key = new WebSessionKey(session.getId(), request, response);
通过WebSessionKey获得HttpServletRequest
ServletRequest request = WebUtils.getRequest(key);

浙公网安备 33010602011771号