shiro 删除用户session_Shiro(二)

安全管理器

通常使用DefaultSecurityManager,在web应用中使用其子类DefaultWebSecurityManager。 DefaultWebSecurityManager实现了WebSecurityManager接口,该类添加了关于session的使用。 DefaultSecurityManager主要实现了SecurityManager的行为login()、logout()、createSubject()。 Spring中配置securityManager:

<!-- 配置securityManager 安全管理器-->
       <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
        <property name="realm" ref="myRealm"></property>
        <property name="sessionManager" ref="sessionManager"></property>
        <property name="rememberMeManager" ref="rememberMeManager"></property>
       </bean>

会话管理器

所谓会话,即用户访问应用时保持的连接关系,在多次交互中应用能够识别出当前访问的用户是谁,且可以在多次交互中保存一些数据。如访问一些网站时登录成功后,网站可以记住用户,且在退出之前都可以识别当前用户是谁。

登录成功后使用Subject.getSession()即可获取会话;其等价于Subject.getSession(true),即如果当前没有创建Session对象会创建一个;另外Subject.getSession(false),如果当前没有创建Session则返回null(不过默认情况下如果启用会话存储功能的话在创建Subject时会主动创建一个Session)。

会话管理器管理着应用中所有Subject的会话的创建、维护、删除、失效、验证等工作。是Shiro的核心组件,顶层组件SecurityManager直接继承了SessionManager,且提供了SessionsSecurityManager实现直接把会话管理委托给相应的SessionManager,DefaultSecurityManager及DefaultWebSecurityManager默认SecurityManager都继承了SessionsSecurityManager。

Shiro提供了三个默认实现:

DefaultSessionManager:DefaultSecurityManager使用的默认实现,用于JavaSE环境;

ServletContainerSessionManager:DefaultWebSecurityManager使用的默认实现,用于Web环境,其直接使用Servlet容器的会话;

DefaultWebSessionManager:用于Web环境的实现,可以替代ServletContainerSessionManager,自己维护着会话,直接废弃了Servlet容器的会话管理。 在Spring中配置sessionManager

<!-- 配置sessionManager 配置后会取代servlet的session,使其不起作用 
            使用SericytyUtil.getSubject().getSession()方法获取
            session对象,使用方法与之前一样 -->
       <bean id="sessionManager" class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager">
        <property name="deleteInvalidSessions" value="true"></property><!-- 清空无效session -->
        <property name="globalSessionTimeout" value="18000000"></property><!-- 超时时限  ms -->
       </bean>

Ini配置文件配置:

sessionIdCookie=org.apache.shiro.web.servlet.SimpleCookie  
    sessionManager=org.apache.shiro.web.session.mgt.DefaultWebSessionManager  
    sessionIdCookie.name=sid  
    sessionIdCookie.maxAge=1800  
    sessionIdCookie.httpOnly=true  
    sessionManager.sessionIdCookie=$sessionIdCookie  
    sessionManager.sessionIdCookieEnabled=true  
    securityManager.sessionManager=$sessionManager

多个Realm的使用

当用用程序需要配置多个Realm时,设置安全管理器中的realms属性,添加多个自定义realm,当有多个realm时就需要执行策略决定是否认证授权成功。

发现需要在执行认证的时候,需要策略来处理多个realm存在的情况。

默认实现类有三个策略:

1. AtLeastOneSuccessfulStrategy :如果一个(或更多)Realm 验证成功,则整体的尝试被认为是成功的。如果没有一个验证成功,则整体尝试失败。

2. FirstSuccessfulStrategy 只有第一个成功地验证的Realm 返回的信息将被使用。后面的realm会被忽略,如果一个都没有成功则失败。

3. AllSucessfulStrategy 为了整体的尝试成功,所有配置的Realm 必须验证成功。如果没有一个验证成功,则整体尝试失败。 ModularRealmAuthenticator 默认的是AtLeastOneSuccessfulStrategy Spring中配置:

<bean id="authenticator" 
        class="org.apache.shiro.authc.pam.ModularRealmAuthenticator">
        <property name="authenticationStrategy">
            <bean class="org.apache.shiro.authc.pam.AtLeastOneSuccessfulStrategy"></bean>
        </property>
    </bean>

在安全管理器中设置

<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
       <property name="realms">
            <list>
                <ref bean="firstRealm"/>
                <ref bean="secondRealm"/>
            </list>
        </property>
    <property name="authenticator" ref="authenticator"></property>

rememberMe

实现一段时间内免登录。 设置cookie和rememberMe。

<!-- 配置cookie-->
       <bean id="simpleCookie" class="org.apache.shiro.web.servlet.SimpleCookie">
        <property name="maxAge" value="604800"></property><!-- 最大时间    s -->
        <property name="name" value="rememberMe"></property><!-- cookie名称 -->
       </bean>
       <!-- 配置rememberMe -->
       <bean id="rememberMeManager" class&
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值