首页 > 其他分享 >Sa-Token简单几行代码,优雅的实现 SpringBoot 鉴权

Sa-Token简单几行代码,优雅的实现 SpringBoot 鉴权

时间:2023-07-27 18:34:08浏览次数:39  
标签:StpUtil SpringBoot 登录 ## 拦截 Token token Sa public

一、添加依赖

二、设置配置文件

三、创建测试Controller:登录接口

四、创建测试Controller:普通访问接口

五、检验当前会话是否已经登录

六、路由拦截鉴权

七、自定义全局异常拦截

添加依赖

        <dependency>
            <groupId>cn.dev33</groupId>
            <artifactId>sa-token-spring-boot-starter</artifactId>
            <version>1.35.0.RC</version>
        </dependency>

设置配置文件


server:
## 端口
port: 8081

## Sa-Token配置
sa-token:
## token 名称 (同时也是cookie名称)
token-name: satoken
## token 有效期,单位s 默认30天, -1代表永不过期
timeout: 2592000
## token 临时有效期 (指定时间内无操作就视为token过期) 单位: 秒
activity-timeout: -1
## 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录)
is-concurrent: true
## 在多人登录同一账号时,是否共用一个token (为true时所有登录共用一个token, 为false时每次登录新建一个token)
is-share: false
## token风格
token-style: uuid
## 是否输出操作日志
is-log: false

创建测试Controller:登录接口

@RestController
@RequestMapping("/user/")
public class UserController {

    // 测试登录,浏览器访问:http://localhost:8080/user/doLogin?username=abc&password=123456
    @RequestMapping("doLogin")
    public String doLogin(String username, String password) {
        // 此处仅作模拟示例,真实项目需要从数据库中查询数据进行比对
        if("abc".equals(username) && "123456".equals(password)) {
            StpUtil.login(10001);
            return "登录成功";
        }
        return "登录失败";
    }
    
}

创建测试Controller:普通访问接口

@RestController
@RequestMapping("/interview")
public class InterviewController {

    @RequestMapping("test1")
    public String test1(){
        // 校验当前客户端是否已经登录,如果未登录则抛出 `NotLoginException` 异常,后面加了路由拦截这个方法就用不上了,可以通过路由拦截
        StpUtil.checkLogin();

        return "访问接口test1";
    }

}

检验当前会话是否已经登录,这个方法可以在接口里单独使用

// 检验当前会话是否已经登录, 如果未登录,则抛出异常:`NotLoginException`
StpUtil.checkLogin();

路由拦截鉴权

@Configuration
public class SaTokenConfigure implements WebMvcConfigurer {
    // 注册拦截器
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 注册 Sa-Token 拦截器,校验规则为 StpUtil.checkLogin() 登录校验。
        registry.addInterceptor(new SaInterceptor(handle -> StpUtil.checkLogin()))
                .addPathPatterns("/**")
                .excludePathPatterns("/user/doLogin");
    }
}

自定义全局异常拦截

@RestControllerAdvice
public class GlobalExceptionHandler {
    // 全局异常拦截
    @ExceptionHandler
    public SaResult handlerException(Exception e) {
        e.printStackTrace();
        return SaResult.error(e.getMessage());
    }
}

image

以上流程全部走完,差不多就实现了登录的基本功能

标签:StpUtil,SpringBoot,登录,##,拦截,Token,token,Sa,public
From: https://www.cnblogs.com/lyd447113735/p/17585757.html

相关文章

  • springboot实现链接生成QrCode
    1.注入依赖<dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.3.0</version></dependency><dependency><groupId>com.google.zxing</groupId>......
  • 使用Docker安装Apollo并使用SpringBoot连接配置中心
    上篇文章我们学习了Apollo的本地安装,如果还不会本地安装的朋友可以查看之前的文章进行了解和学习链接地址(https://www.cnblogs.com/eternality/p/17583023.html),本篇我们学习怎么使用Docker安装Apollo及如何使用Java连接Apollo。阅读本篇文章需要了解docker安装容器相关的使用命令,......
  • P9017 [USACO23JAN] Lights Off G 题解
    Description给定正整数\(N\),和两个长为\(N\)的\(01\)序列\(a\)和\(b\)。定义一次操作为:将\(b\)序列中的一个值翻转(即\(0\)变成\(1\),\(1\)变成\(0\),下同)。对于\(b\)序列中每个值为\(1\)的位置,将\(a\)序列中对应位置的值翻转。将\(b\)序列向右循环移位......
  • rabbitmq告警Error: health check failed. Message: resource alarm(s) in effect:[{r
     这个错误信息表示RabbitMQ的内存使用量超出了预设的阈值,导致触发了RabbitMQ的内存警告阈值报警。RabbitMQ在运行过程中会不断地将消息存储在内存中,如果内存使用量超出了预设的阈值,就会触发内存警告阈值报警。这个阈值的默认值是40%的物理内存,可以通过修改Rabbi......
  • gorm使用Save方法处理时间字段的坑
    视频地址Gorm中Save方法处理时间字段的坑测试代码以及说明packagegorm_testsimport("fmt""github.com/stretchr/testify/require""gorm.io/driver/mysql""gorm.io/gorm""testing""time")const......
  • UVA10702 Travelling Salesman 题解
     UVA10702TravellingSalesman题解题面:有个旅行的商人,他每到一个的新城市,便卖掉所有东西再购买新东西,从而获得利润。从某城市A到某城市B有固定利润(B 到A 的利润可能不同)。已知城市可以重复到达,从S 点出发,经过T 个城市,有E个城市能作为终点,求最大的利润。先定义......
  • SpringBoot 开启GZIP数据压缩
    I.gizp压缩配置1.配置SpringBoot默认是不开启gzip压缩的,需要我们手动开启,在配置文件中添加两行server:compression:enabled:truemime-types:application/json,application/xml,text/html,text/plain,text/css,application/x-javascript注意下上面配置中......
  • Jmeter45 Dubbo Sampler 插件及其教程
    转载Jmeter(五十)DubboSampler-紫陌花间客-博客园(cnblogs.com) 一、前言随着分布式普及,日常工作中多少会接触到dubbo,对于dubbo接口的调用或者压测等等。调用最简单的方式便是telnet,或者泛化调用的方式。进入telnet命令行,invoke对应方法以及传入对应的参数即可。当然......
  • samba服务的部署
    samba服务的部署服务端的部署使用流程1.安装samba软件yuminstallsamba-y2.修改配置文件,依然是设置一个共享文件夹samba的软件配置文件在ls/etc/samba/lmhostssmb.confsmb.conf.example修改/etc/samba/smb.conf添加自定义的,共享文件夹的配置[root@nfs-31......
  • ip6tables-save
    ip6tables-save保存ip6tables表配置补充说明ip6tables-save命令将Linux内核中ip6tables表导出到标准输出设备上。语法ip6tables-save(选项)选项-c:指定在保存iptables表时,保存当前的数据包计数器和字节计数器值;-t:指定要保存的表的名称。......