shiro是如何实现httpsession的操作的
博客专区 > 大海 的博客 > 博客详情
shiro是如何实现httpsession的操作的
大海 发表于1年前
shiro是如何实现httpsession的操作的
  • 发表于 1年前
  • 阅读 47
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 新注册用户 域名抢购1元起>>>   

//获取当前用户
Subject subject = SecurityUtils.getSubject();
//获取当前用户session,默认为不存在session就创建session
Session session = subject.getSessio();

而subject的实现类通过打断点可以知道其实现类为DelegatingSubject,而他有一个方法叫getSession(boolean create),一看就知道
是获取session的意思,这个方法里有一段代码:Session session = this.securityManager.start(sessionContext);
这个this.securityManager的是实现类是ServletContainerSessionManager,查看他的start方法:

 Session session = this.securityManager.start(sessionContext);
其实就是包含了一个createSession方法,然后看HttpSession httpSession = request.getSession();这段代码,
原来shiro获取session还是依赖着httpSession的。


  protected Session createSession(SessionContext sessionContext) throws AuthorizationException {
        if (!WebUtils.isHttp(sessionContext)) {
            String msg = "SessionContext must be an HTTP compatible implementation.";
            throw new IllegalArgumentException(msg);
        }

        HttpServletRequest request = WebUtils.getHttpRequest(sessionContext);

        HttpSession httpSession = request.getSession();

        //SHIRO-240: DO NOT use the 'globalSessionTimeout' value here on the acquired session.
        //see: https://issues.apache.org/jira/browse/SHIRO-240

        String host = getHost(sessionContext);

        return createSession(httpSession, host);
    }

继续往下想,request是如何获取session的。。个人认为是tomcat实现的

共有 人打赏支持
粉丝 3
博文 82
码字总数 32130
×
大海
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: