shiro使用(简单sesiion使用)

既然要做,就做的细致一点,对得起自己!

在shiro中配置session,普通思想:配置session的过期时间,session到期之后,要求用户再次发起登录请求。进阶思想:如果用户一直不关闭浏览器,或者过早的关闭了浏览器,那么就要相应的更新session时间和定期清理这些过期session。高级思想:在分布式系统中,如何在多个系统之间做到session的同步。目前最后一步还没有配置。

1.综上所述,应该有这么几个东西需要配置。定期检查session是否过期的验证器;要对所有session进行管理,需要给session排序,那么需要一个sessionID生成器;同时将sessionID存储在cookie中,以便下次访问服务端根据进行session的比对。

2.sessionID生成器

<!--sessionID生成器-->
    <bean id="sessionIdGenerator" class="org.apache.shiro.session.mgt.eis.JavaUuidSessionIdGenerator"/>

并且配置sessionDao,sessoinDao是直接对session进行操作的地方。

<!--sessionDAO是创建,更新session,删除过期session的地方-->
    <bean id="sessionDAO" class="org.apache.shiro.session.mgt.eis.EnterpriseCacheSessionDAO">
        <!--sessionID生成器-->
        <property name="sessionIdGenerator" ref="sessionIdGenerator"/>
        <!--session缓存的名字,随便设置-->
        <property name="activeSessionsCacheName" value="shiroSessionCache"/>
    </bean>

3.将sessionID保存在cookie中

<!--将sessionID保存在cookie中-->
    <bean id="sessionIdCookie" class="org.apache.shiro.web.servlet.SimpleCookie">
        <constructor-arg value="sid"/>
        <property name="httpOnly" value="true"/>
        <property name="maxAge" value="60000"/>
    </bean>

4.把session交给sessionManager管理,因为shiro是直接管理sessionManager的

 <bean id="sessionManager" class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager">
        <!--1.加这个配置因为,如果不加这个设置,那么登录之后,存在一个session,关闭当前页签,再重新打开一个页签,-->
        <!--就会发现url后面跟着一个jsesessionid,这样第一对于url不美观,第二直接把jsesessionid暴露出来,也不太安全。-->
        <!--所以将下面这个参数设置为false即可-->
        <!--出现这个问题是因为在打开页面的时候,代码中直接进行过redirect重定向,就会出现上述问题,如果不是重定向不清楚是否会出现这个问题-->
       <property name="sessionIdUrlRewritingEnabled" value="false"/>
        <!--过期时间,默认为30分钟-->
        <property name="globalSessionTimeout" value="60000"/>
        <!--删除过期的session-->
        <property name="deleteInvalidSessions" value="true"/>
        <!--设置管理session的各个组件-->
        <property name="sessionValidationSchedulerEnabled" value="true"/>
        <property name="sessionValidationScheduler" ref="sessionValidationScheduler"/>
        <property name="sessionIdCookieEnabled" value="true"/>
        <property name="sessionIdCookie" ref="sessionIdCookie"/>
        <property name="sessionDAO" ref="sessionDAO"/>
    </bean>

5.补上session会话管理的验证器,这里使用的shiro和quartz集成的,不要忘记在pom文件中引入。

<!--配置会话验证调度器,用来扫描失效的session-->
    <bean id="sessionValidationScheduler" class="org.apache.shiro.session.mgt.quartz.QuartzSessionValidationScheduler">
        <property name="sessionManager" ref="sessionManager"/>
        <!--设置扫描失效session的时间间隔,设置为和session的时间一样,当session失效时候,直接被扫描到-->
        <property name="sessionValidationInterval" value="60000"/>
    </bean>

6.将sessionManager添加在security中

<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
        <!--1.在进入securityManager之后,执行权限验证和授权操作都是在realm中进行,所以这里要引入我们自定义的realm-->
        <property name="realm" ref="customRealm"/>
        <!--2.配置登录时的记住我/下次自动登录选项-->
        <property name="rememberMeManager" ref="cookieRememberMe"/>
        <!--3.配置session管理的相关配置-->
        <property name="sessionManager" ref="sessionManager"/>
    </bean>

这样即可实现管理session。

注意:我本人的代码中登录的时候有redirect重定向,所以会出现在地址栏url后面会出现jsesessionid,如下图:

图片中这样

这样是及其危险的,所以在第4步,第一个配置了sessionIdUrlRewritingEnabled设置为false,就不会出现这种情况。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值