首页 > 其他分享 >整合satoken鉴权

整合satoken鉴权

时间:2023-10-31 23:15:33浏览次数:37  
标签:角色 satoken ArrayList token 整合 注解 import 权限 鉴权

依赖

<!--核心库-->
<dependency>
	<groupId>cn.dev33</groupId>
	<artifactId>sa-token-spring-boot-starter</artifactId>
	<version>1.20.0</version>
</dependency>
<!--用Redis缓存授权信息-->
<dependency>
	<groupId>cn.dev33</groupId>
	<artifactId>sa-token-dao-redis</artifactId>
	<version>1.20.0</version>
</dependency>
<!--注解式权限验证-->
<dependency>
	<groupId>cn.dev33</groupId>
	<artifactId>sa-token-spring-aop</artifactId>
	<version>1.20.0</version>
</dependency>

  修改application.yml

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

  

三、权限和角色判定

在本项目中,我们用注解的方式判定用户是否为特定的角色或者拥有某些权限。Sa-Token框架为我们提供了这样的注解。比如说下面的Web方法用到了@SaCheckPermission注解判断用户是否具备ROOT或者AMECT:INSERT权限。

@PostMapping("/insert")
@Operation(summary = "添加罚款记录")
@SaCheckPermission(value = {"ROOT", "AMECT:INSERT"}, mode = SaMode.OR)
public R insert(@Valid @RequestBody InsertAmectForm form) {
	……
}
@SaCheckPermission或者@SaCheckRole注解拦截HTTP请求的时候,会调用特定的Java类来获取用户的权限和角色信息,然后跟注解要求的权限或者角色做匹配,如果能匹配上,就允许HTTP请求调用Web方法,否则就拒绝HTTP请求。话说回来,查询用户权限和角色的若干Java代码需要我们自己写,下面咱们就先从SQL语句开始。
 
<select id="searchUserPermissions" parameterType="int" resultType="String">
	SELECT DISTINCT p.permission_name
  FROM tb_user u
  JOIN tb_role r ON JSON_CONTAINS(u.role, CAST(r.id AS CHAR))
  JOIN tb_permission p ON JSON_CONTAINS(r.permissions, CAST(p.id AS CHAR))
  WHERE u.id=#{userId} AND u.status=1;
</select>

  在com.example.emos.api.config包中创建StpInterfaceImpl.java类,这个Java类就是Sa-Token框架拦截HTTP请求之后调用的类。在这个类中,我们一共要声明两个方法分别用来查询用户实际的权限和角色。然后Sa-Token框架的@SaCheckPermission或者@SaCheckRole注解会根据查询出来的权限和角色,跟注解要求的权限或者角色做匹配。

 
package com.example.emos.api.config;

import cn.dev33.satoken.stp.StpInterface;
import com.example.emos.api.db.dao.TbUserDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;
import java.util.Set;

@Component
public class StpInterfaceImpl implements StpInterface {
    @Autowired
    private TbUserDao userDao;

    /**
     * 返回一个用户所拥有的权限集合
     */
    @Override
    public List<String> getPermissionList(Object loginId, String loginKey) {
        int userId = Integer.parseInt(loginId.toString());
        Set<String> permissions = userDao.searchUserPermissions(userId);
        ArrayList list = new ArrayList();
        list.addAll(permissions);
        return list;
    }

    /**
     * 返回一个用户所拥有的角色标识集合
     */
    @Override
    public List<String> getRoleList(Object loginId, String loginKey) {
        //因为本项目不需要用到角色判定,所以这里就返回一个空的ArrayList对象
        ArrayList<String> list = new ArrayList<String>();
        return list;
    }
}

  好了,至此我们就已经配置好了Sa-Token权限验证框架,比我们自己动手配置Shiro+JWT要简单多了

 

 

 

标签:角色,satoken,ArrayList,token,整合,注解,import,权限,鉴权
From: https://www.cnblogs.com/sgj191024/p/17801894.html

相关文章

  • linux 中paste命令结合管道时调整合并方向
     001、[root@pc1test]#ls##两个测试文件a.txtb.txt[root@pc1test]#cata.txt010203040506070809101112[root@pc1test]#catb.txtabc[root@pc1test]#cut-f2a.txt|paste-b.txt......
  • [Springboot整合thymeleaf]处理js中的路径问题。
    使用了thymeleaf模板引擎之后,html中的标签,都可以直接替换成th:srcth:href但是处理js的中的资源路径并不是像jsp那么简单了。可以通过以下方式解决。<!--处理路径问题--><scriptth:inline="javascript">varpath=[[${#request.contextPath}]]</script><scriptth:inl......
  • 视频汇聚平台EasyCVR分发的流如何进行token鉴权?具体步骤是什么?
    视频监控EasyCVR平台能在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集中管理,在视频监控播放上,TSINGSEE青犀视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放,可同时播放多路视频流,也能支持视频定时轮播。视频监控汇聚平台EasyCVR支持多种播放协议,包括:HLS、HTT......
  • SpringBoot——SSM简单整合v0.1
    学习SpringBoot初次整合SSM,后续需要不断优化参考SpringBoot3教程[1]导入依赖pom.xml<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"......
  • Tita 升级|「绩效」&「360评估」强整合
    1.【绩效考核】绩效和360评估强整合,360评估结果可引入到绩效中Tita-OKR和新绩效一体化管理平台使用场景:人员考核的内容中,360评估作为一个单独的考核维度,其中360评估结果可能参与了总分的计算,也可能仅供查看参考,详细设置请参考此文档;2.【一对一面谈】移动端上线,创建面谈和......
  • Springboot整合XXL-job
    1、开发步骤:pom.xml<!--xxl-job--><dependency><groupId>com.xuxueli</groupId><artifactId>xxl-job-core</artifactId><version>2.3.1</version></dep......
  • 整合spring security自定义认证
    一、认证1.自定义组件  (1)UserDetails自定义,实现用户登录方法;publicinterfaceUserDetailsServiceextendsorg.springframework.security.core.userdetails.UserDetailsService{/***根据用户名获取用户对象(获取不到直接抛异常)*/@OverrideUser......
  • [Spring框架学习]SSM 整合,使用maven构建项目的时候,启动项目报错class path resource
    错误:classpathresource[config/spring/springmvc.xml]cannotbeopenedbecauseitdoesnotexist错误原因:找不到我的springmvc.xml,在下面web.xml中是我引用路径,网上找到问题classpath指向路径不是resource路径,所以一直找不到我的xml文件,classpath:到你的class路径......
  • helm部署kafka鉴权以及ACL
    官方文档https://github.com/bitnami/charts/tree/main/bitnami/kafkahttps://blog.csdn.net/u011618288/article/details/129105777(包含zookeeper与broker认证、鉴权流程)一.修改values.yaml文件按通用部署方案拉下来kafka安装包,修改values.yaml文件,开启scram鉴权,ACL以......
  • Spring Boot整合OAuth2实现GitHub第三方登录
    GithubOAuth第三方登录示例1、第三方登录原理第三方登录的原理是借助OAuth授权来实现,首先用户先向客户端提供第三方网站的数据证明自己的身份获取授权码,然后客户端拿着授权码与授权服务器建立连接获得一个AccessToken,之后客户端就可以通过AccessToken来与资源服务器进行交互......