
我们可以看到这个框架图,我们的整个交互都是与security Manager做交互,而这里面就有一个Session Manager的管理器,Shiro当然内置了实现,我们也可以根据接口拓展其功能,那么下面,我们就来了解一下shiro中关于Session管理的部分内容
这是一个管理器实现类,是shiro提供的可用的结构。
上面两个图是该SessionManager的方法,当然,这些方法并不是全部,因为这个默认的管理器其实继承于其他的一些结构,下面是整个sessionManager的UML图
有关这部分的源码分析,我会在下次有精力的时候用一篇文章更新
获取当前subject的主机地址,该地址是通过HostAuthenticationTokengetHost()提供的。
获取/设置当前Session的过期时间;如果不设置是默认的会话管理器的全局过期时间。
获取会话的启动时间和最后访问时间;如果是JavaSE应用需要自己定期调用sessiontouch()去更新最后访问时间;如果是web应用,每次进入ShiroFilter都会自动调用sessiontouch()来更新最后访问时间。
更新会话最后访问时间及销毁会话;当Subjectlogout()时会自动调用stop方法来销毁会话的。如果在web中,调用javaxservlet>
1、Shiro默认的Session处理方式
<!-- 定义 Shiro 主要业务对象 -->
<bean id="securityManager" class="orgapacheshirowebmgtDefaultWebSecurityManager">
<!-- <property name="sessionManager" ref="sessionManager" /> -->
<property name="realm" ref="systemAuthorizingRealm" />
<property name="cacheManager" ref="shiroCacheManager" />
</bean>
这里从DefaultWebSecurityManager这里看起,这个代码是定义的Shiro安全管理对象,看下面的构造方法(代码 1-1)
(代码 1-1)
public DefaultWebSecurityManager() {
super();
((DefaultSubjectDAO) thissubjectDAO)setSessionStorageEvaluator(new DefaultWebSessionStorageEvaluator());
thissessionMode = >
此处说的不很准确 是默认没有 目前大多在方法上加验证注解实现 这个功能(因为shiro比spring security更细粒度化)
它虽然有基于url的验证
>
在你认证后,并且在第一次判断权限的时候,就会需要加载权限信息,那么这时候,已经存储到cache中了。然后校验。
推荐一套完整的Shiro Demo,免费的。
Shiro介绍文档:管理员帐号:admin,密码:sojsoncom 如果密码错误,请用sojson。PS:你可以注册自己的帐号,然后用管理员赋权限给你自己的帐号,但是,每20分钟会把数据初始化一次。建议自己下载源码,让Demo跑起来,然后跑的更快。
在ShiroRealm 中 对所有 引入的service 加上注解 @Lazy ,防止 事务回滚失败。 具体原因看该文章
新增整合swagger2,因为之前整合了shiro,所以再访问swagger的时候总是被拦截导致无法访问,因此在ShiroConfiguration配置文件中,放开对swagger的拦截
新增CORS跨域配置。
待解决问题:前端利用vue传sessionid,后台通过shiro接收一直接收不到,后前端改成jQuery才可以,不知道问题出在哪
新增@RequiresRoles角色控制,个人感觉@RequiresRoles角色控制,属于粗粒度,@RequiresPermissions属于细粒度,因为@RequiresPermissions能给每个接口定义不同的权限
如下:
@RequiresRoles(value = "admin")
@RequiresPermissions("user:updateSysUser")
两者属于and 的关系,同时添加注解,会先验证此接口是否有规定的角色,然后验证是否有该权限,必须同时满足才会通过认证
@RequiresPermissions多权限是分两种的,这里要注意
第一种:必须全部符合(默认不写或者在后面添加logical = LogicalAND)
@RequiresPermissions(value={“studentMan:find_record_list”,“teacher:find_record_list”})
上面这种情况是默认当前对象必须同时全部拥有指定权限
第二种:符合其中一个即可(logical = LogicalOR)
@RequiresPermissions(value={“studentMan:find_record_list”,“teacher:find_record_list”},logical=LogicalOR)
上面这种情况则是只要有其中一个权限即可访问
pom文件
主要目的通过sessionid验证用户的登录状态
权限表
角色表
s获取父页面的元素可以用$(windowparentdocument)find("#customer_id")val();这里的customer_id表示父页面某一个元素的id。 比如:父页面有一个隐藏的input框,那么在子页面就可以用上述的语句取到父页面的id为customer_id的值。
以上就是关于Shiro Session管理—— *** 作session全部的内容,包括:Shiro Session管理—— *** 作session、Shiro中的filter、怎么获取shiro中的session对象等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)