- Security 与token session 简单设置
- 配置文件
- 设置session (单体)登陆 , 登陆上限后 处理方式
- session 集群处理
@Configuration
public class DataSecurityConfig extends WebSecurityConfigurerAdapter {
//用户信息
@Autowired
private UserDetailService userDetailService;
// 配置好的 数据源 mysql 等
@Autowired
private DataSource dataSource;
@Bean
public PersistentTokenRepository persistentTokenRepository() {
JdbcTokenRepositoryImpl jdbcTokenRepository = new JdbcTokenRepositoryImpl();
jdbcTokenRepository.setDataSource(dataSource);//指定数据源
jdbcTokenRepository.setCreateTableOnStartup(false);// 设置启动项目时,创建保存token 信息到数据库。
return jdbcTokenRepository;
}
...
}
CREATE TABLE persistent_logins (
username VARCHAr (64) NOT NULL,
series VARCHAr (64) PRIMARY KEY,
token VARCHAr (64) NOT NULL,
last_used TIMESTAMP NOT NULL
....
)
例如 用户名,登陆时间, token 表
在主配置类中让配置生效
http. formmLgin() .tokenRepository(persistentTokenRepository()) // 配置 token 持久化仓库 .tokenValiditySeconds(3600) // remember 过期时间,单为秒
session 相关设置, session最小时间时60秒,在最后一次访问后刷新60秒
.sessionManagement() // 添加 Session管理器
.invalidSessionUrl("/session/invalid") // Session失效后跳转到这个链接
设置session (单体)登陆 , 登陆上限后 处理方式
一个账户多处登陆时,处理
.sessionManagement() // 添加 Session管理器
.invalidSessionUrl("/session/invalid") // Session失效后跳转到这个链接
.maximumSessions(1) //最大 session 登陆为1个
.expiredSessionStrategy(sessionExpiredStrategy) //设置并发失效策略
失效策略MySessionExpiredStrategy implements SessionInformationExpiredStrategy
@Component
public class MySessionExpiredStrategy implements SessionInformationExpiredStrategy {
@Override
public void onExpiredSessionDetected(SessionInformationExpiredEvent event) throws IOException, ServletException {
HttpServletResponse resp = event.getResponse();
resp.setStatus(HttpStatus.UNAUTHORIZED.value());
resp.setContentType("application/json;charset=utf-8");
resp.getWriter().write("账户已经在别处登陆,当前登陆失效!");
}
}
也可设置 当账户登陆上限,不允许其他 session 在登陆
.maxSessionsPreventsLogin(true)session 集群处理
集群状态下session 无法存放在单个服务上使用, 需要引入第三例如redis
org.springframework.session spring-session org.springframework.boot spring-boot-starter-data-redis
spring:
session:
store-type: redis //设置存储方式为redis



