简单易学sa-token快速搭建——权限认证《一》
2024-07-04 20:24:04
快速搭建——权限认证《一》
- 环境搭建
- 全局拦截规则
- 功能实现(登录,注销,封禁,踢下线)
- 注解鉴权
- 拦截规则(进阶版)
- 补充(切换账号)
环境搭建
sa-token官网文档
redis安装很简单,写入配置文件下面有实例,token存再redis中
AOP依赖注解实现方式再最后一个
实现:可以在具体方法中使用注解鉴权,不仅仅在controller上使用
<!--mybatis-plus--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.1.1</version></dependency><!-- Sa-Token 权限认证, 在线文档:http://sa-token.dev33.cn/ --><dependency><groupId>cn.dev33</groupId><artifactId>sa-token-spring-boot-starter</artifactId><version>1.28.0</version></dependency><!-- redis依赖包 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><!--Sa-Token-Redis 集成包的版本尽量与 Sa-Token-Starter 集成包的版本一致--><!-- Sa-Token 整合 Redis (使用jackson序列化方式) --><dependency><groupId>cn.dev33</groupId><artifactId>sa-token-dao-redis-jackson</artifactId><version>1.28.0</version></dependency><!-- 提供Redis连接池 --><dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId></dependency><!-- Sa-Token整合SpringAOP实现注解鉴权 --><dependency><groupId>cn.dev33</groupId><artifactId>sa-token-spring-aop</artifactId><version>1.28.0</version></dependency>
application-dev.yml
server:port: 30991servlet:context-path: /jay-adminspring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/kuMing?useUnicode=true&characterEncoding=UTF-8username: rootpassword: 123456789redis:# Redis服务器地址host: 127.0.0.1port: 6379# Redis数据库索引(默认为0)database: 1timeout: 5000
# 线程安全lettuce:pool:# 连接池最大连接数max-active: 200# 连接池最大阻塞等待时间(使用负值表示没有限制)max-wait: -1ms# 连接池中的最大空闲连接max-idle: 10# 连接池中的最小空闲连接min-idle: 0jta:atomikos:datasource:xa-data-source-class-name:
# 两种redis方式,下面的线程不安全
# jedis:
# pool:
# max-active: 50
# max-wait: 3000
# max-idle: 20
# min-idle: 2
mybatis-plus:mapper-locations: classpath:/mapper/*.xml
# 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: random-128# 是否输出操作日志is-log: falsesso:auth-url: http://sa-sso-server.com:9000/sso/auth
启动类:System.out.println(“启动成功:Sa-Token配置如下:” + SaManager.getConfig());
全局拦截规则
路由拦截规则
/*** @author Jay* @version V1.0* @Package com.shanghai.test1114.config* @date 2022/1/27 3:55 下午* 拦截器* 在高版本 SpringBoot (≥2.6.x) 版本下,需要额外添加 @EnableWebMvc 注解才可以使注册拦截器生效。* 拦截器模式和AOP模式不可同时集成*/
@Configuration
public class SaTokenConfigure implements WebMvcConfigurer {// 注册Sa-Token的注解拦截器,打开注解式鉴权功能@Overridepublic void addInterceptors(InterceptorRegistry registry) {// 注册注解拦截器,并排除不需要注解鉴权的接口地址 (与登录拦截器无关)//registry.addInterceptor(new SaAnnotationInterceptor()).addPathPatterns("/**");// 注册Sa-Token的路由拦截器//下面这种是只有登录后才可以访问其他接口,swagger放开可访问 路由拦截规则registry.addInterceptor(new SaRouteInterceptor()).addPathPatterns("/**").excludePathPatterns("/user/doLogin","/swagger-ui.html/**","/swagger-resources/**");}
功能实现(登录,注销,封禁,踢下线)
@GetMapping("/doLogin")
StpUtil.login(user.getUsername()); 登录
StpUtil.logout(); 注销
StpUtil.kickout(RoolId); 踢下线
// 标记当前会话登录的账号id
// 建议的参数类型:long | int | String, 不可以传入复杂类型,如:User、Admin等等
StpUtil.login(Object id); // 当前会话注销登录
StpUtil.logout();// 获取当前会话是否已经登录,返回true=已登录,false=未登录
StpUtil.isLogin();// 检验当前会话是否已经登录, 如果未登录,则抛出异常:`NotLoginException`
StpUtil.checkLogin()