`
阅读更多

该文只是对Shiro有一定程度了解之后的补充,基础部分需要自己找相关资料了解

 

securityManager是Shiro配置的核心,一般情况下可以做如下配置,其中只有realm是必须配置的

<!-- 安全管理器 --> 
<!-- Shiro's main business-tier object for web-enabled applications -->
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
	<property name="realm" ref="shiroDbRealm" />
	<property name="sessionManager" ref="sessionManager"/> 
	<property name="cacheManager" ref="shiroEhcacheManager" />
</bean>

 

1.realm

realm中两个方法 AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authcToken)登陆认证 和 AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals)权限验证 的实现位置,基本上都需要自己实现

个别情况下,比如当使用Shiro-Cas的时候,doGetAuthenticationInfo方法不需要自己实现

 

2.SessionManager

SessionManager默认是 ServletContainerSessionManager 

当使用ServletContainerSessionManager时,验证登陆返回值AuthenticationInfo,中的Principal会被保存到HttpSession中,最后构造的shiro.session接口实现类中一个属性为HttpSession

 

如果使用DefaultWebSessionManager时,会用到SessionDAO,默认的实现是MemorySessionDAO(在其父类DefaultSessionManager中可以看到),如果使用MemorySessionDAO,Principal信息会被保存到MemorySessionDAO维护的一个 ConcurrentMap<Serializable, Session> sessions 中,如果要自己实现中央缓存,就重写该一个AbstractSessionDAO的子类并实现相关方法。

 

这里有个可能出现bug的地方,可以通过配置sessionIdCookie属性,解决被服务器重写cookie中会话ID,导致会话丢失的问题(默认是“JSESSIONID”,跟tomcat和jetty一样)

 

<bean id="sessionManager" class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager">
    <property name="globalSessionTimeout" value="1800000"/>
    <property name="deleteInvalidSessions" value="true"/>
    <property name="sessionValidationSchedulerEnabled" value="true"/>
    <property name="sessionValidationInterval" value="1800000"/>
    <property name="sessionIdCookie" ref="sessionIdCookie"/>
</bean>

<bean id="sessionIdCookie" class="org.apache.shiro.web.servlet.SimpleCookie">
    <constructor-arg name="name" value="SHRIOSESSIONID"/>
</bean>

 所以memcached-session-manager做负载均衡 和 DefaultWebSessionManager 是冲突的,可以考虑自己实现一个SessionDAO来完成负载均衡中会话管理功能

 

3.CacheManager

cacheManager的作用是保存doGetAuthorizationInfo(权限验证)中的返回结果,如果没有配置cacheManager,每一次权限认证都需要重新调用该方法。

 

4.Filter有很多

灵活的登陆可以采用继承AuthenticationFilter来实现

其中onAccessDenied实现调用登录态验证,或验证通过后跳转页面,返回值可以直接用false,表示不需要框架继续处理了,该方法中全部处理了。

 

5.自定义SessionId

需要同时启用sessionIdCookie 和 <property name="sessionIdUrlRewritingEnabled" value="false" /> ,sessionIdUrlRewritingEnabled代表不在URL后追加JessionId

 

 

 

 

 

分享到:
评论
1 楼 sgq0085 2014-12-10  
xfxpeter 写道
转载你一篇文章到我网站上 
http://www.zyiqibook.com

注明原帖地址

相关推荐

    shiro教程 跟我学Shiro教程

    最后,"跟我学Shiro教程.zip"可能是整个教程的综合资源包,包含更多补充材料、练习题或者项目案例,旨在帮助学习者巩固理论知识,并提升实际操作技能。 在学习Shiro时,你需要理解以下关键知识点: 1. **身份验证...

    Shiro_Demo 一个简单的Shiro验证框架实例

    Shiro提供了自己的会话管理机制,可以替代或补充应用服务器的会话管理。在Shiro_Demo中,我们可以配置Shiro如何存储和管理会话,例如使用内存、数据库或分布式存储。同时,Shiro还提供了会话监听器和超时控制等功能...

    补充:ssm+shiro框架整合项目,完整示例的sql语句

    ssm+shiro框架整合项目,注释清楚,可供新手学习,完整示例的sql语句,需要项目的请链接:http://download.csdn.net/download/u014246725/9944156

    shiro 1.4.0 源码、jar包、javadoc

    包含 apache shiro-core v1.4.0 的 java源码、jar包、以及 javadoc。从源码库中整理而来。手动补充了源库 shiro-core-1.4.0-sources.jar 中缺少的 aop、cache、io、event、config、cryptor 等源代码,便于统一查看

    spring-shiro.rar

    在Spring项目中,Shiro可以作为Spring Security的一个补充,处理简单的认证和授权需求。 四、实战演练 在"spring-shiro.rar"压缩包中,开发者可以找到一个完整的示例项目,包括Spring配置文件、Shiro配置、自定义...

    Spring Boot与Shiro实现权限管理

    Shiro的易用性和灵活性使其成为Spring Boot的绝佳补充,尤其适合快速开发中对权限控制的需求。 要将Spring Boot与Shiro整合,我们首先需要在项目中引入Shiro的依赖。在`pom.xml`文件中,添加如下Maven依赖: ```...

    ShiroJBot:Java机器人Shiro的官方版本库

    Seja o que为您准备了Shiro pode补充性seu servidor通讯器,共有150台comandos dos mais diversos tipos! Uma equipe pronta para lhe ajudar! Nãotenha medo de pedir ajuda,sugerir novasfunçõesou deixar...

    Shiro最新全套在线教程(1.74G)

    01.权限管理概述.avi 02.shiro认识.avi 03.使用ini完成认证.avi 04.shiro登录登出流程分析.avi 05.自定义realm登录登出.avi ...23.spring集成-静态注解授权_补充.avi 24.spring集成-权限-角色-用户关系分析.a

    这是一个springboot+vue+shiro的后台权限管理系统,很全.zip

    在本项目中,Shiro可能被用作SpringBoot的补充,处理用户登录、权限控制等安全问题。Shiro提供了一套易于使用的API,可以方便地进行权限检查、角色分配以及会话管理,非常适合在微服务架构中快速实现权限控制。 **4...

    Springboot整合shiro、ehcace、redis、spring data jpa,swagger、fastjson等资源

    springboot完美整合shiro、ehcache、redis、spring data jpa,swagger、fastjson,后续继续补充,适合初中级开发练习掌握框架,代码下载可直接运行,测试已通过

    后台管理系统,前后端分离,后端SpringBoot+Shiro+MyBatis+Redis,前端Vue+Elemen.zip

    在SpringBoot中,Shiro可以作为安全管理的补充,提供权限控制和用户认证。Shiro的简单API使得开发者能轻松地实现如登录验证、角色权限分配等功能。 3. **MyBatis**: MyBatis是一个优秀的持久层框架,它支持定制化...

    Springboot + shiro权限管理 这或许是流程最详细、代码最干净、配置最简单的shiro上手项目了 .zip

    尽管Spring框架自身对编程模型没有限制,但其在Java应用中的频繁使用让它备受青睐,以至于后来让它作为EJB(EnterpriseJavaBeans)模型的补充,甚至是替补。Spring框架为开发提供了一系列的解决方案,比如利用控制...

    基于SpringBoot + Thymeleaf + Layui + Apache Shiro 的后台管理系统.zip

    尽管Spring框架自身对编程模型没有限制,但其在Java应用中的频繁使用让它备受青睐,以至于后来让它作为EJB(EnterpriseJavaBeans)模型的补充,甚至是替补。Spring框架为开发提供了一系列的解决方案,比如利用控制...

    manage:Sprint Boot子1.5 + mybatis + shiro + layui

    本项目是基于开发的,补充功能: shiro并发登陆人数控制(超过登录用户最大配置数量,清理用户)功能;解决在父子页面中,判断用户未登录之后,重定向到登录页面替换显示问题;解决ajax请求,判断用户未登录之后,...

    SpringBoot框架示例:整合SpringMVC、MyBatis、安全框架Shiro、页面布局框架Sitemesh.zip

    尽管Spring框架自身对编程模型没有限制,但其在Java应用中的频繁使用让它备受青睐,以至于后来让它作为EJB(EnterpriseJavaBeans)模型的补充,甚至是替补。Spring框架为开发提供了一系列的解决方案,比如利用控制...

    jfinal-ext-3.1.2.zip

    首先,JFinal-Ext是对原生JFinal框架的重要补充,它提供了一系列实用的工具类和插件,包括但不限于: 1. **ORM优化**:JFinal-Ext增强了JFinal的ORM能力,如支持多对多关系、级联保存和删除,以及更灵活的查询条件...

    cemo.zip_DEMO

    - `SupplementaryCharacterData.java`:可能包含关于Unicode补充字符的数据,用于处理高代理对和低代理对。 - `ComposedCharIter.java`:可能用于迭代和处理组合字符序列,如连字符和附加符号。 - `...

    javaweb敏捷开发+数据库

    补充了sql文件。JEEWEB Mybatis版本是一款基于SpringMVC+Spring+Mybatis+Mybatis Plus的JAVA WEB敏捷开发系统;它是一款具有代码生成功能的智能快速开发平台;是以Spring Framework为核心容器,Spring MVC为模型视图...

    项目管理源码java传统开发

    补充了sql文件。JEEWEB Mybatis版本是一款基于SpringMVC+Spring+Mybatis+Mybatis Plus的JAVA WEB敏捷开发系统;它是一款具有代码生成功能的智能快速开发平台;是以Spring Framework为核心容器,Spring MVC为模型视图...

    springboot-shiro-cas-mybatis:【停止维护】该方式太愚蠢,分布式微服务时代局限性太差!推荐(使用JWT实现单点登录,完全跨域方案。———2019_07_09补充):https

    该项目不维护,推荐OAuth2实现sso: 目前该项目所有代码资源搭建测试来源于互联网。 sso服务端需要的模块如下cas 4.1.x版本[为什么不用4.2.x,看了一下使用gradle,我eclipse只是安装了maven,不想折腾gradle,毕竟...

Global site tag (gtag.js) - Google Analytics