shiro源码分析篇1:前言

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010399009/article/details/78298634

目的:通过这几篇shiro源码分析,用redis代替ehache做session缓存。

相信大家对shiro也不陌生了,网上对shiro源码分析的也比较多了。笔者也看多很多优秀的博客。这几篇shiro源码分析的目的,就是弄明白,shiro是如何管理session的,如何通过redis来解决session跨域问题。一步步分析最终达到这个目的。

前言:Session和cookies

笔者想通过几个问题来解决我心中的疑惑。

1.Session创建的时间

我们第一次打开浏览器,访问某网站发起请求时,比如请求百度的首页,会返回一个Session。真正返回是执行 HttpSession session = HttpServletRequest.getSession(true)这句话时产生的。我们知道第一次访问某个网站就会产生一个session返回给客户端。

2.第一次Session获取后,以后浏览器请求是否都是同一个Session发起请求

第一次服务器返回给浏览器会产生一个session,当然可以设置过期时间,过期后重新生成session。但是session没有过期,浏览器每次请求会在请求头部上:Cookie:JSESSIONID=客户端第一次拿到的session ID。
这样就在用户登录后,以后服务器只要检测session就知道用户有没有登录,如果不是同一个session那么岂不每次都要登录。

但是是否每次请求都是同一个Session下。笔者认为同一浏览器是一致的。如果你要同个浏览器多个窗口,或者不同浏览器等等,可能会不一致。

3.Session如何删除

1.清除浏览器缓存。哈哈你好多网站都需要重新登录了。
2.Session超时删除。
3.服务器关闭。

4.Session保存在哪里

session存在服务器内存中,我们可以将它持久化,例如redi缓存下来。

我们看看第一次请求请求是没有带上session的。
这里写图片描述
第二次请求带上session,是第一次服务器返回的。

session和cookies的区别:

相信这个大家百度就有很多答案了。

shiro是如何管理session?

思考这样一个问题,如果让你做一个登录功能,如何管理用户登录状态?

1.用户第一次登录时,登录成功后,将session缓存起来,比如ehcache或者redis,设置缓存的过期时间。

2.用户点击被拦截的其他链接时。首先会获取请求中session,注意前面讲过同一浏览器会是同一个session。获得请求的session从缓存中去查找,如果存在并且缓存过期时间没有过,那么更新缓存时间。如果没有找到或者session已经过期,那么拦截成功跳到登录页面。

shiro同样是这样。当然shiro远比这复杂多了。

接下来我的分析思路是:

1.shiro如何拦截请求,如何通过session找不到缓存,跳到登录页面。
2.用户登录成功后,如何将session缓存下来。
3.如何用redis来做单点登录。

大概后续有三篇博客。


菜鸟不易,忘有问题指出,共同进步。

猜你喜欢

转载自blog.csdn.net/u010399009/article/details/78298634