亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

Spring Boot 整合 Sa-Token 實現登錄認證

標簽:
SpringBoot

今天分享的是 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

到这里,登录就算完成了,希望今天的分享能够在工作中帮助到你。

點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
JAVA開發工程師
手記
粉絲
1.4萬
獲贊與收藏
707

關注作者,訂閱最新文章

閱讀免費教程

  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消