springboot整合shiro框架实现session会话超时
时间: 2023-09-09 12:14:04 浏览: 161
在使用 Spring Boot 整合 Shiro 进行开发时,可以通过配置 Shiro 的 session 过期时间来实现会话超时。具体实现步骤如下:
1. 在 Shiro 的配置文件中配置 session 过期时间:
```xml
<bean id="sessionManager" class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager">
<!-- session 过期时间,单位毫秒 -->
<property name="globalSessionTimeout" value="1800000"/>
<!-- 是否开启删除无效的 session 对象 -->
<property name="deleteInvalidSessions" value="true"/>
</bean>
```
2. 在 Spring Boot 的配置类中配置 Shiro 过滤器:
```java
@Configuration
public class ShiroConfig {
@Bean
public ShiroFilterFactoryBean shiroFilterFactoryBean(DefaultWebSecurityManager securityManager) {
ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
// 必须设置 SecurityManager
shiroFilterFactoryBean.setSecurityManager(securityManager);
// 配置登录的 url 和登录成功的 url
shiroFilterFactoryBean.setLoginUrl("/login");
shiroFilterFactoryBean.setSuccessUrl("/index");
// 配置未授权跳转页面
shiroFilterFactoryBean.setUnauthorizedUrl("/403");
// 配置访问权限
LinkedHashMap<String, String> filterChainDefinitionMap = new LinkedHashMap<>();
// 过滤链定义,从上向下顺序执行,一般将 /** 放在最为下边
// authc:所有 url 都必须认证通过才可以访问;anon:所有 url 都都可以匿名访问
filterChainDefinitionMap.put("/login", "anon");
filterChainDefinitionMap.put("/logout", "logout");
filterChainDefinitionMap.put("/static/**", "anon");
filterChainDefinitionMap.put("/js/**", "anon");
filterChainDefinitionMap.put("/css/**", "anon");
filterChainDefinitionMap.put("/images/**", "anon");
filterChainDefinitionMap.put("/**", "authc");
shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
return shiroFilterFactoryBean;
}
@Bean
public DefaultWebSecurityManager securityManager() {
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
securityManager.setRealm(userRealm());
securityManager.setSessionManager(sessionManager());
return securityManager;
}
@Bean
public UserRealm userRealm() {
return new UserRealm();
}
@Bean
public DefaultWebSessionManager sessionManager() {
DefaultWebSessionManager sessionManager = new DefaultWebSessionManager();
// 设置 session 过期时间,单位毫秒
sessionManager.setGlobalSessionTimeout(1800000);
// 删除无效的 session 对象
sessionManager.setDeleteInvalidSessions(true);
return sessionManager;
}
}
```
通过以上配置,可以在 Shiro 中实现 session 会话超时功能。在用户登录后,session 的过期时间会被设置为配置的时间,当用户在该时间内没有操作时,session 会话将被 Shiro 销毁,用户需要重新登录。
阅读全文