栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Security 与token session 简单设置

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Security 与token session 简单设置

Security 与token session 简单设置

文章目录
  • 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
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/838800.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号