若依框架实现一个用户最大会话数

1.首先在配置文件中配置指定的参数(application.yml)
在这里插入图片描述
如上图所示,在session中配置maxSession 和kickoutAfter。
2.然后在com\ruoyi\framework\config\ShiroConfig.java
(1)获取配置文件中maxSession 和kickoutAfter的值。

 // 同一个用户最大会话数
    @Value("${shiro.session.maxSession}")
    private int maxSession;
    // 踢出之前登录的/之后登录的用户,默认踢出之前登录的用户
    @Value("${shiro.session.kickoutAfter}")
    private boolean kickoutAfter;

(2)同一个用户最大的会话数,默认-1无限制;比如2的意思是同一个用户允许最多同时两个人登录。是否踢出后来登录的,默认是false;即后者登录的用户踢出前者登录的用户;踢出顺序。被踢出后重定向到的地址;

/**
 * 同一个用户多设备登录限制
 */
public KickoutSessionFilter kickoutSessionFilter()
{
    KickoutSessionFilter kickoutSessionFilter = new KickoutSessionFilter();
    kickoutSessionFilter.setCacheManager(getEhCacheManager());
    kickoutSessionFilter.setSessionManager(sessionManager());
    // 同一个用户最大的会话数,默认-1无限制;比如2的意思是同一个用户允许最多同时两个人登录
    kickoutSessionFilter.setMaxSession(maxSession);
    // 是否踢出后来登录的,默认是false;即后者登录的用户踢出前者登录的用户;踢出顺序
    kickoutSessionFilter.setKickoutAfter(kickoutAfter);
    // 被踢出后重定向到的地址;
    kickoutSessionFilter.setKickoutUrl("/login?kickout=1");
    return kickoutSessionFilter;
}

(3)把kickoutSessionFilter()注入到shiroFilterFactoryBean中。

Map<String, Filter> filters = new LinkedHashMap<String, Filter>();
//限制同一帐号同时在线的个数。
filters.put("kickout", kickoutSessionFilter());
// 注销成功,则跳转到指定页面
filters.put("logout", logoutFilter());
shiroFilterFactoryBean.setFilters(filters);
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值