返回

进击的单地登录、多地登录、同端互斥登录

后端

不同登录模式揭秘:单点登录、多点登录、同端互斥登录

单点登录:便捷高效,风险隐患高

单点登录(Single Sign On,简称SSO)允许用户使用同一组登录凭据访问多个应用程序。这种方法简化了登录流程,提高了用户体验。然而,单点登录也带来了潜在的安全隐患,如果主账号被盗,则其他关联账号也会受到威胁。

多点登录:灵活便捷,设备安全要求高

多点登录允许用户同时在多个设备上使用多个账号登录同一应用程序。这种方法提供了灵活性,但对设备的安全要求较高,因为每个设备都可能成为攻击点。

同端互斥登录:社交聊天的黄金准则

同端互斥登录限制用户在同一类型设备上仅能使用一个账号登录同一应用程序。例如,在同一台电脑上,用户无法同时登录两个微信账号。这种方法可以有效防止账号被盗用,增强账号安全性。

实现登录模式利器:Sa-Token

Sa-Token是一款开源权限框架,可轻松实现单点登录、多点登录和同端互斥登录等多种登录模式。其特点包括:

  • 使用简单: 支持主流框架和语言,降低学习成本
  • 功能丰富: 包含权限管理、单点登录、多点登录、同端互斥登录等功能
  • 性能高效: 采用分布式缓存技术,支持高并发场景
  • 安全可靠: 采用加密、签名、防篡改等措施,保障系统安全

Sa-Token使用示例

以下示例展示了如何使用Sa-Token实现单点登录:

// 引入Sa-Token依赖
<dependency>
  <groupId>com.github.sa-token</groupId>
  <artifactId>sa-token-core</artifactId>
  <version>2.8.0</version>
</dependency>

// 配置Sa-Token
@Configuration
public class SaTokenConfig {

  @Bean
  public SaTokenManager saTokenManager() {
    SaTokenManager saTokenManager = SaTokenManager.newInstance();
    // 设置数据源(这里使用内存数据库)
    saTokenManager.setDataSource(new SaTokenDataSource() {

      @Override
      public List<SaTokenModel> queryByLoginId(String loginId) {
        // 模拟从数据库查询数据
        List<SaTokenModel> list = new ArrayList<>();
        list.add(new SaTokenModel()
          .setLoginId("test")
          .setPassword("123456")
          .setStatus(1)
        );
        return list;
      }

      @Override
      public List<String> queryPermissionList(Object loginId, int loginType) {
        // 模拟从数据库查询权限列表
        List<String> list = new ArrayList<>();
        list.add("user:view");
        list.add("user:edit");
        return list;
      }

      @Override
      public List<String> queryRoleList(Object loginId, int loginType) {
        // 模拟从数据库查询角色列表
        List<String> list = new ArrayList<>();
        list.add("admin");
        list.add("user");
        return list;
      }
    });
    return saTokenManager;
  }
}

// 使用Sa-Token
@RestController
public class SaTokenController {

  @PostMapping("/login")
  public R login(@RequestParam String username, @RequestParam String password) {
    // 登录成功后,生成token
    String token = saTokenManager().login(username, password);
    return R.ok().put("token", token);
  }

  @PostMapping("/logout")
  public R logout() {
    // 退出登录
    saTokenManager().logout();
    return R.ok();
  }

  @GetMapping("/checkLogin")
  public R checkLogin() {
    // 检查是否登录
    boolean isLogin = saTokenManager().isLogin();
    return R.ok().put("isLogin", isLogin);
  }
}

总结

根据业务场景的不同,我们可以选择不同的登录模式。Sa-Token提供了全面的功能和强大的安全性,是一个实现登录模式的理想选择。

常见问题解答

  1. 单点登录比多点登录更安全吗?
    不,单点登录的安全隐患更高,因为一个账号被盗,会导致所有关联账号被盗。

  2. 同端互斥登录是否限制了用户的灵活性?
    不一定,同端互斥登录可以有效防止账号被盗,增强安全性,但在某些场景下确实会限制用户的灵活性。

  3. Sa-Token支持哪些登录模式?
    Sa-Token支持单点登录、多点登录和同端互斥登录等多种登录模式。

  4. Sa-Token的性能如何?
    Sa-Token采用分布式缓存技术,支持高并发场景,性能高效。

  5. Sa-Token使用起来复杂吗?
    Sa-Token使用简单,支持主流框架和语言,降低学习成本。