shiro配置sessionmanager
时间: 2023-08-26 21:07:11 浏览: 130
在 Shiro 中,SessionManager 负责管理用户的会话信息,其主要职责包括创建、获取、删除和管理会话等。下面是一个简单的 Shiro SessionManager 的配置示例:
```xml
<bean id="sessionManager" class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager">
<!-- session过期时间,单位:毫秒 -->
<property name="globalSessionTimeout" value="1800000" />
<!-- 是否开启URL地址栏中的SessionID重写 -->
<property name="sessionIdUrlRewritingEnabled" value="false" />
<!-- 是否开启删除无效的session对象 -->
<property name="deleteInvalidSessions" value="true" />
<!-- 是否开启定时调度器检测失效的session对象 -->
<property name="sessionValidationSchedulerEnabled" value="true" />
<!-- 定时清理失效session的时间间隔,单位:毫秒;默认1小时 -->
<property name="sessionValidationInterval" value="3600000" />
<!-- 会话DAO -->
<property name="sessionDAO" ref="redisSessionDAO" />
</bean>
```
其中,`DefaultWebSessionManager` 是 Shiro 默认提供的 Web 环境下的 SessionManager 实现类,我们可以通过配置它的属性来实现相关功能。具体的属性含义如下:
- `globalSessionTimeout`:会话超时时间,单位为毫秒,默认为30分钟。
- `sessionIdUrlRewritingEnabled`:是否在URL地址栏中重写Session ID,默认为false,建议不开启,因为这会让URL泄漏了Session ID,存在安全风险。
- `deleteInvalidSessions`:是否开启删除无效Session对象,默认为true,表示当Session超时或者被踢出时自动删除相应的Session对象。
- `sessionValidationSchedulerEnabled`:是否开启定时调度器检测失效的Session对象,默认为true,表示在应用启动时会启动一个定时任务,定期检测失效的Session并删除它们。
- `sessionValidationInterval`:定时清理失效Session的时间间隔,单位为毫秒,默认为1小时。
- `sessionDAO`:指定会话DAO,即会话的存储方式。这里我们使用 Redis 作为会话存储方式,所以指定了 `redisSessionDAO`。
需要注意的是,如果要使用 Redis 作为会话存储方式,还需要配置相应的 `redisSessionDAO`。具体的配置可以参考下面的示例:
```xml
<bean id="redisSessionDAO" class="org.crazycake.shiro.RedisSessionDAO">
<!-- 配置RedisManager -->
<property name="redisManager" ref="redisManager" />
<!-- session在Redis中的过期时间,单位是秒 -->
<property name="expire" value="1800" />
</bean>
<bean id="redisManager" class="org.crazycake.shiro.RedisManager">
<!-- Redis服务器地址,格式为:host:port -->
<property name="host" value="127.0.0.1:6379" />
<!-- Redis服务器连接超时时间,单位为毫秒,默认为2000ms -->
<property name="timeout" value="2000" />
<!-- Redis服务器密码,如果没有设置可以不填 -->
<property name="password" value="your_password" />
<!-- Redis数据库编号,默认为0 -->
<property name="database" value="0" />
</bean>
```
其中,`RedisSessionDAO` 是一个实现了 Shiro `SessionDAO` 接口的 Redis Session 存储类。`RedisManager` 则是一个 Redis 连接管理类,用于管理与 Redis 服务器的连接。需要注意的是,上面的 `redisSessionDAO` 和 `redisManager` 需要通过 Spring 容器进行管理,所以需要在 Spring 配置文件中进行相应的配置。
阅读全文