如何shiro中shiro principall 属性的属性

在这里介绍一个简单,基本的權限设计其中包括3个类,有User,Role,Auth下面是类信息。

 
 
 
 
 
 
 

因为在User里面设置的roles,auths为Set类型,Role里面设置的auths为Set类型在jsp页面编辑注入到实体里的时候会有问题,所以均添加了Trans字段和对应的方法目的是用于转换。
前面的文章已经介绍过realm的编写如果对realm不了解可以看看前面的文章。在realm中我们会覆写doGetAuthorizationInfo方法shiro在第一次需要认证权限的时候会调用这个方法,并把权限信息放到缓存中在这个方法里,我们调用了SimpleAuthorizationInfo的addRoles方法把用户的角色添加到叻info中调用addStringPermissions方法把用户的权限信息添加到info中。这样shiro就可以从中取出角色码和权限码进行配对。下面再简单给出doGetAuthorizationInfo方法的实现
 
 

版权声明:本文为博主原创文章未经博主允许不得转载。 /zsg88/article/details/

如保存到关系数据库/文件系统/NoSQL数据库;即可以实现会话的持久化; //根据会话ID获取会话 //更新会话;如更新会话最後访问时间/停止会话/设置超时时间/设置移除属性等会调用 //删除会话;当会话过期/会话停止(如用户退出时)会调用 //获取当前所有活跃用户如果用户量多此方法影响性能


缓存管理器,用于管理缓存的此处使用Ehcache实现

配置设置会话ID生成器,


最近集成框架用到shiro碰到url有时候会帶上jsessionid有时候又没有以前也碰到但是没有深入研究。

网上查了半天各种方法用了都没用比如web.xml里面加session-config,添加DisableUrlSessionFilter 等等神马都没用。于是自己研究源码说了半天废话终于进入正题。先申明下我是菜鸟说的不对的错的请无视。有些是网上复制的

先说下为什么网上那些玩意没用。

嫆器,没有别的使用这个默认的一个好处是,使用现有的 servlet 容器的应用程序会话配置(超时,任何特定容器集群机制等)将正常工作。这个默认的缺點是,你与 servlet 容器的特定会话行为 举个例子,如果你想集群会话,但你使用 Jetty 在生产、测试和 Tomcat redis的源码改造的所以跟spring能很好的集成具体后面再说。)

下媔分析源码先说下shiro的每次访问都会构建subject。

创建session request里面存值好了说完了。看不懂得自己脑补把

我的办法在每次跳转之前就判断sessionid是否有值。因为每次跳转之前subject就已经创建了session至于如果禁用cookies。同样还是会在url上加上jsessionid我们只是把判断给至前了。并没有修改原有逻辑具体代码如丅

——————————————————————————————黄金分割线————————————————————————————————————————

如果你的shiro版本在1.3.2版本以上这个BUG已经解决只需要在配置文件如下配置中添加红色部分


我要回帖

更多关于 shiro principal 的文章

 

随机推荐