SpringBoot整合Sa-Token实现登录认证的示例代码

 更新时间:2022年01月19日 09:42:00   作者:冯文议  
本文主要介绍了SpringBoot整合Sa-Token实现登录认证的示例代码,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

今天分享的是 Spring Boot 整合 Sa-Token 实现登录认证。

依赖

首先,我们需要添加依赖:

  • 关键依赖:
<dependency>
    <groupId>cn.dev33</groupId>
    <artifactId>sa-token-spring-boot-starter</artifactId>
    <version>1.28.0</version>
</dependency>
  • 其他依赖:
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    
    <dependency>
        <groupId>com.fengwenyi</groupId>
        <artifactId>JavaLib</artifactId>
        <version>2.1.5</version>
    </dependency>

    <dependency>
        <groupId>com.fengwenyi</groupId>
        <artifactId>api-result</artifactId>
        <version>2.5.1</version>
    </dependency>

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-validation</artifactId>
    </dependency>
</dependencies>

登录

  • 构造用户数据
public class UserData {

    private static final Map<String, User> users = Map.of(
            "u1", new User("01", "u1", "123456", List.of("ROLE_USER")),
            "a2", new User("02", "a2", "123456", List.of("ROLE_ADMIN", "ROLE_USER"))
    );


    public static class User {
        public String uid;
        public String username;
        public String password;
        public List<String> roles;

        public User(String uid, String username, String password, List<String> roles) {
            this.uid = uid;
            this.username = username;
            this.password = password;
            this.roles = roles;
        }
    }

    public static User queryByUsername(String username) {
        return users.get(username);
    }

    public static List<String> queryRolesByUid(String uid) {
        for (Map.Entry<String, User> entry : users.entrySet()) {
            if (uid.equals(entry.getValue().uid)) {
                return entry.getValue().roles;
            }
        }
        return null;
    }

}
  • 登录认证
@RestController
@RequestMapping("/auth")
public class AuthController {

    @PostMapping("/login")
    public ResponseTemplate<LoginResponseVo> login(@RequestBody @Validated LoginRequestVo requestVo) {
        String username = requestVo.getUsername();
        String password = requestVo.getPassword();

        UserData.User user = UserData.queryByUsername(username);

        if (Objects.isNull(user)) {
            return ResponseTemplate.fail("用户名不正确");
        }

        if (!user.password.equals(password)) {
            return ResponseTemplate.fail("密码不正确");
        }

        StpUtil.login(user.uid);
        LoginResponseVo responseVo = new LoginResponseVo()
                .setToken(StpUtil.getTokenValue())
                ;
        return ResponseTemplate.success(responseVo);
    }

}

关键代码

StpUtil.login(user.uid);
LoginResponseVo responseVo = new LoginResponseVo()
        .setToken(StpUtil.getTokenValue())
        ;
  • 测试

请求:

POST localhost:8080/auth/login

{
    "username": "u1",
    "password": "123456"
}

响应:

{
  "code": 0,
  "message": "Success",
  "success": true,
  "body": {
    "token": "f2f9a82f-bc6a-460a-877e-9d3e4c8867de"
  }
}

退出登录

@RestController
@RequestMapping("/auth")
public class AuthController {
    
    @PostMapping("/logout")
    public ResponseTemplate<Void> logout() {
        StpUtil.logout();
        return ResponseTemplate.success();
    }

}

前后端分离

header 添加

satoken = f2f9a82f-bc6a-460a-877e-9d3e4c8867de

到此这篇关于SpringBoot整合Sa-Token实现登录认证的示例代码的文章就介绍到这了,更多相关SpringBoot Sa-Token登录认证内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java求出任意数字的各个位数之和方式

    Java求出任意数字的各个位数之和方式

    这篇文章主要介绍了Java求出任意数字的各个位数之和方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • spring @Conditional的使用与扩展源码分析

    spring @Conditional的使用与扩展源码分析

    这篇文章主要介绍了spring @Conditional的使用与扩展,这里需要注意如果Condition返回的是false,那么spirng就不会对方法或类进行解析,具体源码分析跟随小编一起看看吧
    2022-03-03
  • Java数组转换为List的四种方式

    Java数组转换为List的四种方式

    这篇文章主要介绍了Java开发技巧数组转List的四种方式总结,每种方式结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-09-09
  • Spring Boot Hello World的实现代码

    Spring Boot Hello World的实现代码

    这篇文章主要介绍了Spring Boot Hello World的实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-06-06
  • 详解springboot配置多个redis连接

    详解springboot配置多个redis连接

    Spring Boot为Redis, MongoDB, Elasticsearch, Solr和Gemfire提供自动配置。本文详细介绍了springboot配置多个redis连接,有兴趣的可以了解一下。
    2017-04-04
  • Java设计模式之迭代器模式_动力节点Java学院整理

    Java设计模式之迭代器模式_动力节点Java学院整理

    这篇文章主要介绍了Java设计模式之迭代器模式_动力节点Java学院整理,需要的朋友可以参考下
    2017-08-08
  • java转化为exe程序步骤详解

    java转化为exe程序步骤详解

    在本篇内容里我们给大家分享了关于java转化为exe程序的具体步骤和相关知识点,需要的朋友们学习下。
    2019-03-03
  • JAVA计算两个日期相差的实例

    JAVA计算两个日期相差的实例

    在java中我找了一下关于计算两个日期之间相差的天数方法有10多种实现方法,下面总结一下常用的几种计算两个日期之间相差的天数实例
    2013-11-11
  • java实现给出分数数组得到对应名次数组的方法

    java实现给出分数数组得到对应名次数组的方法

    这篇文章主要介绍了java实现给出分数数组得到对应名次数组的方法,涉及java针对数组的遍历、排序及运算的相关技巧,需要的朋友可以参考下
    2015-07-07
  • Json字符串内容比较超实用教程

    Json字符串内容比较超实用教程

    这篇文章主要介绍了Json字符串内容比较-超实用版,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-09-09

最新评论