SpringCloud+Vue+Python人工智能(fastAPI,机器学习,深度学习)前后端架构各功能实现思路——SpringCloud后端——Sa-Token实现Security权限管理

基于SpringBoot的影像注册系统04 sa-token使用(源码解析 + 万字 逻辑:查询username存不存在,再查询密码是否正确,只要没有抛异常就调用sa-token的login方法。 StpUtil.login(userReal.getId()); login方法传入我们user的id,比如: 把int类型的数值传进去了。 步骤 4 sa-token登录认证 ================= [核心思想](() 所谓登录认证,说白了就是限制某些API接口必须登录后才能访问(例:查询我的账号资料) 那么如何判断一个会话是否登录?框架会在登录成功后给你做个标记,每次登录认证时校 阅读详情
SpringCloud+Vue+Python人工智能(fastAPI,机器学习,深度学习)前后端架构各功能实现思路——主目录(持续更新):https://blog.youkuaiyun.com/grd_java/article/details/144986730

一、Sa-Token集成

1. 引入依赖

base模块作为业务万物之源,切不可亵玩焉,要是什么都让它扛,一旦出问题,整个系统就要招收灭顶之灾


众所周知,base模块是既支持全局网关Gateway又支持通用业务模块common的男人,而gateway与common又有着不可调节的矛盾

gateway是WebFlux,与我们业务微服务的web包完全冲突


那gateway要全局鉴权,而common下的业务模块也需要鉴权,怎么办?sa-token已经考虑到了 这一点,它搞了两个包,一个专门给webflux环境用,一个给正常spring boot web应用去用


在这里插入图片描述


所以,gateway单独引入sa-token-reactor-spring-boot-starter,common引入sa-token-spring-boot-starter


事情就怎么水灵灵的解决了

而sa-token又需要redis的支持,gateway和common下业务微服务都需要使用。此时就将其引入到base模块下即可


如果我们需要业务redis和权限redis分离,还需要引入分离包

1. 根目录pom中统一管理sa-token依赖版本,记住只是管理版本,不是将依赖引入到了根目录pom对应父模块中哦


在这里插入图片描述


在这里插入图片描述

        <!-- Sa-Token 权限认证,在线文档:https://sa-token.cc -->
        <sa-token-spring-boot-starter>1.39.0</sa-token-spring-boot-starter>
        <!-- Sa-Token 权限认证(Reactor响应式集成), 在线文档:https://sa-token.cc -->
        <sa-token-reactor-spring-boot-starter>1.39.0</sa-token-reactor-spring-boot-starter>
        <!-- Sa-Token 插件:整合SSO单点登录 -->
        <sa-token-sso>1.39.0</sa-token-sso>
        <!-- Sa-Token 整合 Redis (使用 jackson 序列化方式) -->
        <sa-token-redis-jackson>1.39.0</sa-token-redis-jackson>
        <!-- Sa-Token插件:权限缓存与业务缓存分离 -->
        <sa-token-alone-redis>1.39.0</sa-token-alone-redis>

        <dependencies>
            <!-- Sa-Token 权限认证,在线文档:https://sa-token.cc -->
            <dependency>
                <groupId>cn.dev33</groupId>
                <artifactId>sa-token-spring-boot-starter</artifactId>
                <version>${sa-token-spring-boot-starter}</version>
            </dependency>
            <!-- Sa-Token 权限认证(Reactor响应式集成), 在线文档:https://sa-token.cc -->
            <dependency>
                <groupId>cn.dev33</groupId>
                <artifactId>sa-token-reactor-spring-boot-starter</artifactId>
                <version>${sa-token-reactor-spring-boot-starter}</version>
            </dependency>
            <!-- Sa-Token 插件:整合SSO -->
            <dependency>
                <groupId>cn.dev33</groupId>
                <artifactId>sa-token-sso</artifactId>
                <version>${sa-token-sso}</version>
            </dependency>

            <!-- Sa-Token 整合 Redis (使用 jackson 序列化方式) -->
            <dependency>
                <groupId>cn.dev33</groupId>
                <artifactId>sa-token-redis-jackson</artifactId>
                <version>${sa-token-redis-jackson}</version>
            </dependency>
            <!-- Sa-Token插件:权限缓存与业务缓存分离 -->
            <dependency>
                <groupId>cn.dev33</groupId>
                <artifactId>sa-token-alone-redis</artifactId>
                <version>${sa-token-alone-redis}</version>
            </dependency>

2. gateway 单独引入响应式依赖


在这里插入图片描述

        <!-- Sa-Token 权限认证(Reactor响应式集成), 在线文档:https://sa-token.cc -->
        <dependency>
            <groupId>cn.dev33</groupId>
            <artifactId>sa-token-reactor-spring-boot-starter</artifactId>
        </dependency>

3. common引入业务模块需要的依赖


在这里插入图片描述

        <!-- Sa-Token 权限认证,在线文档:https://sa-token.cc -->
        <dependency>
            <groupId>cn.dev33</groupId>
            <artifactId>sa-token-spring-boot-starter</artifactId>
        </dependency>

4. base模块引入sa-token的redis依赖


在这里插入图片描述

        <!-- Sa-Token 整合 Redis (使用 jackson 序列化方式) -->
        <dependency>
            <groupId>cn.dev33</groupId>
            <artifactId>sa-token-redis-jackson</artifactId>
        </dependency>
        <!-- 提供Redis连接池 -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
        </dependency>
        <!-- Sa-Token插件:权限缓存与业务缓存分离 -->
        <dependency>
            <groupId>cn.dev33</groupId>
            <artifactId>sa-token-alone-redis</artifactId>
        </dependency>

2. rbac数据库表

经典5张表,实现后台系统权限控制


在这里插入图片描述

/*
 Navicat Premium Data Transfer

 Source Server         : localhost3306
 Source Server Type    : MySQL
 Source Server Version : 80017
 Source Host           : localhost:3306
 Source Schema         : sys

 Target Server Type    : MySQL
 Target Server Version : 80017
 File Encoding         : 65001

 Date: 10/02/2022 15:30:20
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for sys_menu
-- ----------------------------
DROP TABLE IF EXISTS `sys_menu`;
CREATE TABLE `sys_menu`  (
  `id` char(20) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'id',
  `pid` char(20) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT '父菜单id',
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT '菜单名',
  `type` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT '菜单类型(目录,按钮)',
  `permission` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT '菜单权限',
  `url` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'url',
  `path` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'path',
  `component` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT '组件',
  `iconCls` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT '图标',
  `keepAlive` tinyint(1) NULL DEFAULT NULL COMMENT '是否保持激活',
  `requireAuth` tinyint(1) NULL DEFAULT NULL COMMENT '是否要求权限',
  `enabled` tinyint(1) NULL DEFAULT NULL COMMENT '是否启用',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of sys_menu
-- ----------------------------
INSERT INTO `sys_menu` VALUES ('1490549095108968448', '0', '首页', 'menu', 'home', NULL, '/', NULL, NULL, NULL, NULL, NULL);
INSERT INTO `sys_menu` VALUES ('1490549401968443392', '0', '权限管理', 'menu', 'security', NULL, '/security', NULL, NULL, NULL, NULL, NULL);
INSERT INTO `sys_menu` VALUES ('1490549872766484480', '1490549401968443392', '用户管理', 'menu', 'security', NULL, 'user', NULL, NULL, NULL, NULL, NULL);
INSERT INTO `sys_menu` VALUES ('1490549939053264896', '1490549401968443392', '角色管理', 'menu', 'security', NULL, 'role', NULL, NULL, NULL, NULL, NULL);
INSERT INTO `sys_menu` VALUES ('1490550012319367168', '1490549401968443392', '菜单管理', 'menu', 'security', NULL, 'menu', NULL, NULL, NULL, NULL, NULL);
INSERT INTO `sys_menu` VALUES ('1490551718331547648', '1490549872766484480', '添加按钮', 'button', 'btn:security', 'security/sys-user-role/add', '', NULL, NULL, NULL, NULL, NULL);
INSERT INTO `sys_menu` VALUES ('1490633481049341952', '1490549872766484480', '展示权限(用户是否可以浏览此页面)', 'view', '/', NULL, NULL, NULL, NULL, NULL, NULL, NULL);

-- ----------------------------
-- Table structure for sys_role
-- ----------------------------
DROP TABLE IF EXISTS `sys_role`;
CREATE TABLE `sys_role`  (
  `id` char(20) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'id',
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT '角色名',
  `name_zh` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT '角色描述',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of sys_role
-- ----------------------------
INSERT INTO `sys_role` VALUES ('1', 'ROLE_admin', '超级管理员');
INSERT INTO `sys_role` VALUES ('1490553559727472640', 'ROLE_author', '作者');
INSERT INTO `sys_role` VALUES ('2', 'ROLE_user', '普通用户');

-- ----------------------------
-- Table structure for sys_role_menu
-- ----------------------------
DROP TABLE IF EXISTS `sys_role_menu`;
CREATE TABLE `sys_role_menu`  (
  `rid` char(20) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT '角色id',
  `mid` char(20) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT '菜单id'
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of sys_role_menu
-- ----------------------------
INSERT INTO `sys_role_menu` VALUES ('1', '1490549095108968448');
INSERT INTO `sys_role_menu` VALUES ('1', '1490549401968443392');
INSERT INTO `sys_role_menu` VALUES ('1', '1490549872766484480');
INSERT INTO `sys_role_menu` VALUES ('1', '1490551718331547648');
INSERT INTO `sys_role_menu` VALUES ('1', '1490549939053264896');
INSERT INTO `sys_role_menu` VALUES ('1', '1490550012319367168');
INSERT INTO `sys_role_menu` VALUES ('1490553559727472640', '1490549095108968448');
INSERT INTO `sys_role_menu` VALUES ('2', '1490549095108968448');
INSERT INTO `sys_role_menu` VALUES ('2', '1490633481049341952');
INSERT INTO `sys_role_menu` VALUES ('2', '1490549939053264896');
INSERT INTO `sys_role_menu` VALUES ('2', '1490550012319367168');

-- ----------------------------
-- Table structure for sys_user
-- ----------------------------
DROP TABLE IF EXISTS `sys_user`;
CREATE TABLE `sys_user`  (
  `id` char(20) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '用户id',
  `username` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '用户名',
  `password` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '密码',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of sys_user
-- ----------------------------
INSERT INTO `sys_user` VALUES ('1', 'admin', '$2a$10$/BnlSX.KM14t9c9j5p9TUerKXkpuvcvmvEf5J2i2Jb8OEv9Dp178K');
INSERT INTO `sys_user` VALUES ('1490553814707601408', '游客', '$2a$10$hidoRf81Kpibr1seSl7QVeOrm/3x2rpwzWYkRsKxjcm6sd192ZoN2');
INSERT INTO `sys_user` VALUES ('1490553884043640832', '作者', '$2a$10$TEvZ5Cd/HxItTFzNpC3n3e7AmfA5KVXndvMdo6a99VtN1Rb7EIyyy');

-- ----------------------------
-- Table structure for sys_user_role
-- ----------------------------
DROP TABLE IF EXISTS `sys_user_role`;
CREATE TABLE `sys_user_role`  (
  `uid` char(20) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '用户id',
  `rid` char(20) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '角色id'
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of sys_user_role
-- ----------------------------
INSERT INTO `sys_user_role` VALUES ('1489965313679163392', '1');
INSERT INTO `sys_user_role` VALUES ('2', '1');
INSERT INTO `sys_user_role` VALUES ('2', '1490188252357853184');
INSERT INTO `sys_user_role` VALUES ('2', '2');
INSERT INTO `sys_user_role` VALUES ('1489978103777198080', '1490188227389161472');
INSERT INTO `sys_user_role` VALUES ('1489978103777198080', '1490188199299907584');
INSERT INTO `sys_user_role` VALUES ('1489978103777198080', '1490188252357853184');
INSERT INTO `sys_user_role` VALUES ('1490553814707601408', '2');
INSERT INTO `sys_user_role` VALUES ('1490553884043640832', '1490553559727472640');
INSERT INTO `sys_user_role` VALUES ('1', '1');
INSERT INTO `sys_user_role` VALUES ('1', '1490553559727472640');
INSERT INTO `sys_user_role` VALUES ('1', '2');
INSERT INTO `sys_user_role` VALUES ('1', '1');
INSERT INTO `sys_user_role` VALUES ('1', '1490553559727472640');
INSERT INTO `sys_user_role` VALUES ('1', '2');

SET FOREIGN_KEY_CHECKS = 1;

3. 创建对应数据库表的MVC架构

如果懒得自己创建,就参考主目录中,mybatis plus整合,里面有代码生成器,可以一键生成


https://blog.youkuaiyun.com/grd_java/article/details/145061518


在这里插入图片描述

4. sa配置

gateway和鉴权微服务都需要单独配置,sa-token需要使用redis,因此需要配置redis,并且我们这里是业务redis和鉴权reids分离的

sa-token: 中的token-name必须与所有其它微服务一致


在这里插入图片描述

feign:
    okhttp:
        enabled: true #feign组件

server:
    port: 7071 # 当前服务端口号

# 日志放置的路径和级别
project:
    folder: E:/webser/yd_oa_cloud/ 
log:
    root:
        level: debug
############## Sa-Token 配置 (文档: https://sa-token.cc) ##############
    
# 业务redis
spring:
  # redis配置
  redis:
    # Redis数据库索引(默认为0)
    database: 1
    # Redis服务器地址
    host: 127.0.0.1
    # Redis服务器连接端口
    port: 6379
    # Redis服务器连接密码(默认为空)
    # password:
    # 连接超时时间
    timeout: 10s
    lettuce:
        pool:
            # 连接池最大连接数
            max-active: 200
            # 连接池最大阻塞等待时间(使用负值表示没有限制)
            max-wait: -1ms
            # 连接池中的最大空闲连接
            max-idle: 10
            # 连接池中的最小空闲连接
            min-idle: 0

# Sa-Token 配置
sa-token: 
    # token 名称(同时也是 cookie 名称)
    token-name: authorization
    # token 有效期(单位:秒) 默认30天,-1 代表永久有效
    timeout: 60 # 设置为60秒,方便测试
    # token 最低活跃频率(单位:秒),如果 token 超过此时间没有访问系统就会被冻结,默认-1 代表不限制,永不冻结
    active-timeout: -1
    # 是否允许同一账号多地同时登录 (为 true 时允许一起登录, 为 false 时新登录挤掉旧登录)
    is-concurrent: false
    # 在多人登录同一账号时,是否共用一个 token (为 true 时所有登录共用一个 token, 为 false 时每次登录新建一个 token)
    is-share: true
    # token 风格(默认可取值:uuid、simple-uuid、random-32、random-64、random-128、tik)
    token-style: uuid
    # 是否输出操作日志
    is-log: true
    # 配置 Sa-Token 单独使用的 Redis 连接 
    alone-redis: 
        # Redis数据库索引(默认为0)
        database: 2
        # Redis服务器地址
        host: 127.0.0.1
        # Redis服务器连接端口
        port: 6379
        # Redis服务器连接密码(默认为空)
        password: 
        # 连接超时时间
        timeout: 10s
        lettuce:
            pool:
                # 连接池最大连接数
                max-active: 200
                # 连接池最大阻塞等待时间(使用负值表示没有限制)
                max-wait: -1ms
                # 连接池中的最大空闲连接
                max-idle: 10
                # 连接池中的最小空闲连接
                min-idle: 0

二、security微服务

此微服务为认证微服务。负责登录,认证,鉴权。这里会将rbac相关业务操作一起写在这里。如有需求,rbac也应该单独一个微服务负责,但是大多数项目没有这个必要,浪费资源

是否需要单点登录?如果需要则此微服务需要引入单点登录相关依赖,但是我这里暂时不需要单点登录,日后扩展新系统时,会扩充单点登录功能,这里建议大家和我一样,先写普通单系统登录,日后公司需要

下面的依赖我不会在现在引入我的项目中


在这里插入图片描述

        <!-- Sa-Token 插件:整合SSO -->
        <dependency>
            <groupId>cn.dev33</groupId>
            <artifactId>sa-token-sso</artifactId>
        </dependency>

1. 添加sa-token配置

和gateway一样,需要redis等配置,如果需要单点登录,就额外加上单点登录的配置,代码块中一并给出,自己选择

nacos配置中心


在这里插入图片描述


在这里插入图片描述

在这里插入图片描述

server:
    port: 7072
spring:
  servlet:
    multipart:
      max-file-size: 10MB
      max-request-size: 15MB
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/yd_oa_db?serverTimeZone=GMT%2B8&useUnicode=true&characterEncoding=utf-8&autoReconnect=true&allowMultiQueries=true
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver
    hikari:
      pool-name: HikariCPDatasource
      minimum-idle: 5
      idle-timeout: 180000
      maximum-pool-size: 10
      auto-commit: true
      max-lifetime: 1800000
      connection-timeout: 30000
      connection-test-query: SELECT 1
  # redis配置
  redis:
    # Redis数据库索引(默认为0)
    database: 1
    # Redis服务器地址
    host: 127.0.0.1
    # Redis服务器连接端口
    port: 6379
    # Redis服务器连接密码(默认为空)
    # password:
    # 连接超时时间
    timeout: 10s
    lettuce:
        pool:
            # 连接池最大连接数
            max-active: 200
            # 连接池最大阻塞等待时间(使用负值表示没有限制)
            max-wait: -1ms
            # 连接池中的最大空闲连接
            max-idle: 10
            # 连接池中的最小空闲连接
            min-idle: 0
  
#mybatis 大小写转驼峰
mybatis:
  configuration:
    map-underscore-to-camel-case: true
mybatis-plus:
  # 对于 Maven 多模块项目,扫描路径应以 classpath*: 开头,以加载多个 JAR 包中的 XML 文件。
  mapper-locations: classpath*:mappers/*.xml #配置mapper xml文件的路径

# Sa-Token 配置
sa-token: 
    # token 名称(同时也是 cookie 名称)
    token-name: authorization
    # token 有效期(单位:秒) 默认30天,-1 代表永久有效
    timeout: 18000 # 5小时,5*60*60
    # token 最低活跃频率(单位:秒),如果 token 超过此时间没有访问系统就会被冻结,默认-1 代表不限制,永不冻结
    active-timeout: -1
    # 是否允许同一账号多地同时登录 (为 true 时允许一起登录, 为 false 时新登录挤掉旧登录)
    is-concurrent: false
    # 在多人登录同一账号时,是否共用一个 token (为 true 时所有登录共用一个 token, 为 false 时每次登录新建一个 token)
    is-share: true
    # token 风格(默认可取值:uuid、simple-uuid、random-32、random-64、random-128、tik)
    token-style: uuid
    # 是否输出操作日志
    is-log: true
    
    # ------- SSO-模式二相关配置
    sso-server:
      # Ticket有效期 (单位: 秒),默认五分钟
      ticket-timeout: 300
      # 所有允许的授权回调地址
      allow-url: "*"



    # 配置 Sa-Token 单独使用的 Redis 连接 
    alone-redis: 
        # Redis数据库索引(默认为0)
        database: 2
        # Redis服务器地址
        host: 127.0.0.1
        # Redis服务器连接端口
        port: 6379
        # Redis服务器连接密码(默认为空)
        password: 
        # 连接超时时间
        timeout: 10s
        lettuce:
            pool:
                # 连接池最大连接数
                max-active: 200
                # 连接池最大阻塞等待时间(使用负值表示没有限制)
                max-wait: -1ms
                # 连接池中的最大空闲连接
                max-idle: 10
                # 连接池中的最小空闲连接
                min-idle: 0

代码中也不要忘了


在这里插入图片描述

spring:
  profiles:
    active: dev #定义环境为开发环境
  application:
    name: yd-oa-java-security # 服务名字,服务之间相互调用都依赖这个名字,注意不可以使用下划线,因为Gateway不支持下划线
  # spring cloud相关配置
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848 # localhost:8848为默认的nacos本地端口位置
      config:
        server-addr: 127.0.0.1:8848 # 配置中心地址
        file-extension: yml # 配置中心的文件后缀类型
        # 配置中心要加载的yml文件名为yd_oa_java_gateway-dev.yml这样式的,也就是服务名-环境.后缀
        shared-configs: ${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} # 对应nacos配置中心的Data Id

2. 启动类

Spring Boot第一步, 小小启动类就上强度


在这里插入图片描述

package com.yd_oa_java_cloud.security;

import cn.dev33.satoken.SaManager;
import cn.dev33.satoken.sso.SaSsoManager;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
//启动类,springIOC容器加载时 扫描的包范围为com.yd_oa_java_cloud,主要要将你想要spring管理的包都放在一个固定路径下
//我们写代码时,经常创建包搞一个什么com.XXXXX.XXXXX,然后配置时就用com.XXXXX
@MapperScan("com.yd_oa_java_cloud.*.mapper")
@SpringBootApplication(scanBasePackages = {"com.yd_oa_java_cloud"})
public class YdOaCloudSecurityRunApplication {
    public static void main(String[] args) {
        SpringApplication.run(YdOaCloudSecurityRunApplication.class,args);
        System.out.println();
        System.out.println("启动成功,Sa-Token 配置如下:" + SaManager.getConfig());
        System.out.println("---------------------- Sa-Token SSO 统一认证中心启动成功 ----------------------");
        System.out.println("配置信息:" + SaSsoManager.getServerConfig());
        System.out.println();
    }
}

启动后,看看打印的配置信息是否正确


在这里插入图片描述

启动后,成功注册到nacos


在这里插入图片描述

三、rbac功能开发

具体rbac需要的接口由于篇幅原因,放在另一篇文章中:https://blog.youkuaiyun.com/grd_java/article/details/145081600

四、登录,网关统一鉴权,网关openfeign远程调用

具体代码由于篇幅原因,放在另一篇文章中:https://blog.youkuaiyun.com/grd_java/article/details/145165507
SaToken认证授权快速上手 SaToken 是一个轻量级 Java 权限认证框架,主要解决:登录认证、权限认证、单点登录、OAuth2.0、分布式Session会话、微服务网关鉴权 等一系列权限相关问题。Sa-Token 旨在以简单、优雅的方式完成系统的权限认证部分。SaToken官网,原理如下自定义接口实现SaToken框架的StpInterface接口,自动帮我们进行执行业务逻辑(获取权限集合,获取角色集合)/*** 自定义权限认证接口扩展,Sa-Token 将从此实现类获取每个账号拥有的权限码。 阅读详情

相关推荐

Python 实现京东自动登录领京豆

今天带大家进行模拟京东登录,并进行签到获取京豆,1000 个京豆 = 10 元,是不是一个发现了一个「发家致富」的好路子?废话不多说,下面开始正题。整体流程如下:京东自动签到流程1 模拟登录首先我们需要的就是模拟京东登录,只有登录了才能进行签到领京豆等操作。模拟登录其实就是通过 HTTP 的 POST 请求讲用户的登录信息发送给服务器进行认证的过程。1.1 登录数据分析登录过程表面上看着挺简单,我...

王冠hurt的博客 2万+

Sa-Token 实现分布式登录鉴权(轻量级,超简单)

点击关注公众号,利用碎片时间学习1. Sa-Token 介绍Sa-Token 是一个轻量级 Java 权限认证框架,主要解决:登录认证、权限认证、单点登录、OAuth2.0、分布式Session会话、微服务网关鉴权 等一系列权限相关问题。功能结构图2. 登录认证对于一些登录之后才能访问的接口(例如:查询我的账号资料),我们通常的做法是增加一层接口校验:如果校验通过,则:正常返回数据。如果校验未通过...

Java笔记虾 7329

SaToken简介与基本使用

Sa-Token是一个轻量级Java权限认证框架,主要解决:登录认证、权限认证、单点登录、OAuth2.0、分布式Session会话、微服务网关鉴权 等一系列权限相关问题。SaToken官方文档非常详尽,大家可以按照手册的指引可以很轻松的把SaToken整合到SpringBoot项目中。

2201_75288829的博客 5197

再见Spring Security!推荐一款功能强大的权限认证框架,用起来够优雅!

‍‍在我们做SpringBoot项目的时候,认证授权是必不可少的功能!我们经常会选择Shiro、Spring Security这类权限认证框架来实现,但这些框架使用起来有点繁琐,而且功能也...

HollisChuang's Blog 2242

Visual Studio Git 使用指南

Visual Studio 2022深度集成了Git功能,提供了直观的图形界面管理源代码。本文详细介绍了VS中Git的使用方法:从环境准备、克隆/创建仓库开始,重点讲解了"Git更改"窗口的日常操作,包括查看修改、暂存文件、提交推送等。同时涵盖了分支管理、查看历史、解决冲突等核心功能,以及储藏、重置等高级操作。文章还提供了实用技巧,如提交规范、频繁提交等最佳实践。VS的Git集成覆盖了日常开发需求,图形界面与命令行可互补使用,适合各层次开发者高效管理代码版本。

guigenyi的专栏 1567

【第六届起重机创意大赛国一作品——资料分享】

文章目录前言一、比赛内容分析二、确定方案与作品模型1.方案简图2.作品模型三、电控部分控制思路单片机选择与资源分配拓展板的设计接线与走线代码分享总结

qq_19308801的博客 7781

Sa-token基本使用教程(全网最详细!!!)

Sa-Token登录认证权限认证Session会话单点登录OAuth2.0微服务网关鉴权等一系列权限相关问题。功能简单示例Sa-Token 的 API 设计非常简单,有多简单呢?以登录认证// 在登录时写入当前会话的账号id// 然后在需要校验登录处调用以下方法:// 如果当前会话未登录,这句代码会抛出 `NotLoginException` 异常权限认证示例(只有具备user:add权限的会话才可以进入请求)// ...return "用户增加";将某个账号踢下线。

可乐要加冰!!! 2万+

AI 编程组合之deepseek+vscode+cline插件,使用deepseek大模型实现代码自动生成

本文介绍了VSCODE下cline插件的安装结合DeepSeek-V3,ai编程的组合套件,举了两个例子一个是生成登录页面,一个是生成贪吃蛇游戏

技术博客 7万+

Sa-Token,一款更加轻量的权限认证框架

Sa-Token 是一个轻量级 Java 权限认证框架,主要解决:登录认证、权限认证、单点登录、OAuth2.0、分布式Session会话、微服务网关鉴权 等一系列权限相关问题。// 会话登录,参数填登录人的账号id StpUtil . login(10001);就仅仅这一行代码即可搞定,无需实现任何接口,无需创建任何配置文件,只需要这一句静态代码的调用,便可以完成会话登录认证。

一个人的江湖 5094

谷粒商城 - 个人笔记(集群部署篇一)

电商后台管理系统+电商系统,掌握微服务的全套方案。该系统有商品服务、仓储服务、订单服务、购物车服务、检索服务、认证中心服务、网关服务、用户服务、秒杀服务、第三方服务。使用SpringBoot+SpringCloud并配套SpringCloud Alibaba系列,引入全套微服务治理方案:Nacos注册中心/配置中心、Feign远程调用、Gateway网关、Redisson缓存、基于ElasticSearch7全文检索、异步编排与线程池、RabbitMQ柔性事务方案、Redisson分布式锁、分布式信号量等。

知行 4004

数字IC后端实现 | Innovus各个阶段常用命令汇总

数字IC后端设计实现之Innovus常用命令汇总

weixin_37584728的博客 7321

Sa-Token简单学习教程

​Sa-Token是一个轻量级 Java 权限认证框架​ 主要解决:登录认证、权限认证、Session会话、单点登录、OAuth2.0、微服务网关鉴权等一系列权限相关问题。

H_xiao_nian的博客 3415

手把手教你学PCIE--所有 PF(Physical Function)共同管理和分配 VF

但具体如何分配和使用 VF 取决于硬件设计、驱动程序配置以及实际应用场景。

MHD0815的博客 1462

sa-token多端登陆实现,PC,APP登陆分别设置token过期时间

Sa-Token 是一个轻量级 Java 权限认证框架,主要解决:登录认证、权限认证、单点登录、OAuth2.0、分布式Session会话、微服务网关鉴权 等一系列权限相关问题。

weixin_44315761的博客 6972

极智嘉嵌入式面试题及参考答案

IIC(Inter-Integrated Circuit)即集成电路总线,是一种由 PHILIPS 公司开发的两线式串行总线,用于连接微控制器及其外围设备。它仅使用两根线,即串行数据线 SDA 和串行时钟线 SCL,就能实现多个设备之间的通信,具有简单、高效、占用资源少等优点,广泛应用于各种嵌入式系统中。

大模型大数据攻城狮的专栏 921

RAP 值帮助实战:用 CDS 注解把 Fiori Elements 的输入体验做得又快又准

本文系统介绍了如何在SAP RAP应用中实现高效的值帮助(Value Help)功能。通过复用标准CDS View和自定义View Entity,开发者可以快速为字段添加弹窗选择、搜索和下拉框功能。文章详细讲解了三种核心实现方式:复用标准值帮助CDS View实现快速集成;构建自定义View Entity支持企业特定编码;利用搜索注解(@Search)和下拉框注解(@ObjectModel)优化用户体验。特别强调了文本显示、模糊搜索和小结果集下拉等实用技巧,并提供了可直接复用的国家代码值帮助示例。这些方法能

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 6465

【Sa-Token】Spring Boot项目中使用Sa-Token框架

本篇介绍的是Sa-Token的使用

apple_51673523的博客 2610

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

SaToken认证与授权框架

Sa-Token是一个轻量级Java权限认证框架,主要解决:登录认证、权限认证、单点登录、OAuth2.0、分布式Session会话、微服务网关鉴权 等一系列权限相关问题。SaToken官方文档非常详尽,大家可以按照手册的指引可以很轻松的把SaToken整合到SpringBoot项目中。

2302_78886445的博客 4290

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Sa-token笔记

SA-Token是一个轻量级Java权限认证框架,主要解决:登录认证、权限认证、Session会话、单点登录、OAuth2.0等功能。你可以使用SA-Token来轻松地实现项目的权限控制,并且几乎零学习成本。SA-Token以简单、易用、安全为主要设计目标,提供了丰富的API和灵活的扩展机制,可以满足大多数项目的需求。

zsq050612的博客 1894

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Spring Boot中使用Sa-Token实现轻量级登录与鉴权

Sa-Token 是一个轻量级 Java 权限认证框架,主要解决:登录认证、权限认证、单点登录、OAuth2.0、分布式Session会话、微服务网关鉴权 等一系列权限相关问题。功能结构图@Data@Component // 保证此类被SpringBoot扫描,完成Sa-Token的自定义权限验证扩展/*** 返回一个账号所拥有的权限码集合*/@Override// 本list仅做模拟,实际项目中要根据具体业务逻辑来查询权限//从redis中获取权限/**

m0_71777195的博客 3773

Sa-Token 的简介和使用

市场上,Shiro、SpringSecurity是目前鉴权主要的两个工具组件,在从最基本的配置到约定大于配置的发展道路上,Sa-token 应运而生。该组件目前在github上仅有1W的star,但是却有着很大的影响力。因为他的简约配置和优雅使用,得到了更多开发者的依赖。

qq_34654085的博客 4193

SaToken技术分享文档

SaToken技术分享 1.什么是SaToken Sa-Token 是一个轻量级 Java 权限认证框架,主要解决:登录认证、权限认证、Session会话、单点登录、OAuth2.0、微服务网关鉴权 等一系列权限相关问题,简化了相对Shiro或者SpringSecurity的复杂的前置配置,比如自定义的Realm或者全局过滤器这些。 SaToekn与Shiro以及SpringSecurity对比 相同点:都具备认证、授权、加密、会话、缓存、rememerMe等功能,都是一种安全认证框架。 SpringSec

持续输出Java相关知识 6445

Sa-Token (java权限认证框架)

本文介绍了轻量级Java权限认证框架Sa-Token的核心功能与应用实践。首先概述了Sa-Token的五大功能模块:登录认证、权限认证、单点登录、OAuth2.0和微服务鉴权。重点讲解了SpringBoot集成Sa-Token的配置步骤,包括依赖添加、YML配置和启动设置。详细解析了基础功能实现,如登录认证流程、权限校验、会话管理、踢人下线等操作,并提供了丰富的代码示例。文章还深入探讨了注解鉴权、路由拦截、多账号认证等高级特性,特别强调了"记住我"模式在前后端分离场景下的安全风险。最后总

loongson_的博客 2204

Spring Boot 整合 SA-Token 使用详解

SA-Token是一个基于Token的Java权限认证框架,主要解决:登录认证、权限认证、Session会话、踢出登录、单点登录、OAuth2.0、微服务网关鉴权等一系列权限相关问题。SA-Token以“简单、易用、安全”为设计目标,致力于打造一个轻量级的权限认证框架。SA-Token允许你通过实现接口来自定义Token的生成、解析和验证逻辑。这对于有特殊Token格式或加密需求的应用非常有用。@Component// 实现自定义的Token处理逻辑// 在配置类中指定自定义的Token处理器。

hong161688的博客 3881

sa-token快速上手

轻量级认证鉴权框架 sa-token快速入门,spring boot集成sa-token

虎年限定七月月的博客 1360

Spring Boot整合Sa-Token:轻量级权限认证框架实战

Sa-Token是一款轻量级Java权限认证框架,专为解决Web系统的登录认证、权限控制、Session会话等问题而设计。其核心优势在于API简洁、功能丰富、扩展性强,支持注解鉴权、多账号体系、单点登录等场景相比Shiro和Spring Security,Sa-Token的学习成本和集成难度更低,适合快速开发。Sa-token功能概览Sa-Token 目前主要五大功能模块:登录认证、权限认证、单点登录、OAuth2.0、微服务鉴权。登录认证—— 单端登录、多端登录、同端互斥登录、七天内免登录。权限认证。

咖啡因依赖症晚期 3039
上一篇: SpringCloud+Vue+Python人工智能(fastAPI,机器学习,深度学习)前后端架构各功能实现思路——SpringCloud后端——整合mybatis plus和代码生成器
下一篇: SpringCloud+Vue+Python人工智能(fastAPI,机器学习,深度学习)前后端架构各功能实现思路——SpringCloud后端——登录,网关统一鉴权
ydenergy_殷志鹏
博客等级 码龄7年 5885粉丝 543原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ydenergy_殷志鹏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值