Spring Gateway、Sa-Token、nacos完成认证/鉴权

这篇具有很好参考价值的文章主要介绍了Spring Gateway、Sa-Token、nacos完成认证/鉴权。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Spring Gateway、Sa-Token、nacos完成认证/鉴权,spring,gateway,数据库

Spring Gateway、Sa-Token、nacos完成认证/鉴权

前言

之前进行鉴权、授权都要写一大堆代码。如果使用像Spring Security这样的框架,又要花好多时间学习,拿过来一用,好多配置项也不知道是干嘛用的,又不想了解。要是不用Spring Security,token的生成、校验、刷新,权限的验证分配,又全要自己写,想想都头大。

Spring Security太重而且配置繁琐。自己实现所有的点必须又要顾及到,更是麻烦。

最近看到一个权限认证框架,真是够简单高效。这里分享一个使用Sa-Token的gateway鉴权demo。

Spring Gateway、Sa-Token、nacos完成认证/鉴权,spring,gateway,数据库

Sa-Token

需求分析

Spring Gateway、Sa-Token、nacos完成认证/鉴权,spring,gateway,数据库

结构

Spring Gateway、Sa-Token、nacos完成认证/鉴权,spring,gateway,数据库

认证

sa-token模块

我们首先编写sa-token模块进行token生成和权限分配。

在sa-token的session模式下生成token非常方便,只需要调用

StpUtil.login(Object id);     
复制代码

就可以为账号生成 Token 凭证与 Session 会话了。

配置信息

server:
  # 端口
  port: 8081
​
spring:
  application:
    name: weishuang-account
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/weishuang_account?useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true&useSSL=false&serverTimezone=Asia/Shanghai&zeroDateTimeBehavior=CONVERT_TO_NULL
    username: root
    password: root
  # redis配置
  redis:
    # Redis数据库索引(默认为0)
    database: 0
    # 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 配置 (文档: https://sa-token.cc) ##############
sa-token:
  # token名称 (同时也是cookie名称)
  token-name: weishuang-token
  # token有效期,单位s 默认30天, -1代表永不过期
  timeout: 2592000
  # token临时有效期 (指定时间内无操作就视为token过期) 单位: 秒
  activity-timeout: -1
  # 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录)
  is-concurrent: true
  # 在多人登录同一账号时,是否共用一个token (为true时所有登录共用一个token, 为false时每次登录新建一个token)
  is-share: true
  # token风格
  token-style: uuid
  # 是否输出操作日志
  is-log: false
  # token前缀
  token-prefix: Bearer
复制代码

在sa-token的配置中,我使用了token-name来指定token的名称,如果不指定那么就是默认的satoken。

使用token-prefix来指定token的前缀,这样前端在header里传入token的时候就要加上Bearer了(注意有个空格),建议和前端商量一下需不需要这个前缀,如果不使用,直接传token就好了。

现在调用接口时传入的格式就是

weishuang-token = Bearer token123456
复制代码

sa-token的session模式需要redis来存储session,在微服务中,各个服务的session也需要redis来同步。

当然sa-token也支持jwt来生成无状态的token,这样就不需要在服务中引入redis了。本文使用session模式(jwt的刷新token等机制还要自己实现,session的刷新sa-token都帮我们做好了,使用默认的模式更加方便,而且功能更多)

我们来编写一个登录接口

User

@Data
public class User {
​
    /**
     * id
     */
    private String id;
​
    /**
     * 账号
     */
    private String userName;
​
    /**
     * 密码
     */
    private String password;
​
}
复制代码

UserController

@RestController
@RequestMapping("/account/user/")
public class UserController {
​
    @Autowired
    private UserManager userManager;
​
    @PostMapping("doLogin")
    public SaResult doLogin(@RequestBody AccountUserLoginDTO req) {
        userManager.login(req);
​
        return SaResult.ok("登录成功");
    }
}
复制代码

UserManager

@Component
public class UserManagerImpl implements UserManager {
​
    @Autowired
    private UserService userService;
​
    @Override
    public void login(AccountUserLoginDTO req) {
        //生成密码
        String password = PasswordUtil.generatePassword(req.getPassword());
        //调用数据库校验是否存在用户
        User user = userService.getOne(req.getUserName(), password);
        if (user == null) {
            throw new RuntimeException("账号或密码错误");
        }
        
        //为账号生成Token凭证与Session会话
        StpUtil.login(user.getId());
        //为该用户的session存储更多信息
        //这里为了方便直接把user实体存进去了,也包括了密码,自己实现时不建议这样做。
        StpUtil.getSession().set("USER_DATA", user);
    }
​
}
复制代码

UserService文章来源地址https://www.toymoban.com/news/detail-708166.html

@Service
public class Us

到了这里,关于Spring Gateway、Sa-Token、nacos完成认证/鉴权的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • spring boot +Sa-Token优雅的实现项目鉴权!

    最近在做登录、授权的功能,一开始考虑到的是spring boot + spring security,但spring security太重,而我们是轻量级的项目,所以,spring security不适合我们。 而后考虑spring boot + shiro,但shiro自带的aop会影响spring boot的aop,所以,shiro也不适合我们。 后来浏览github时,发现Sa-Token这个框

    2024年02月06日
    浏览(50)
  • Sa-Token 多账号认证:同时为系统的 Admin 账号和 User 账号提供鉴权操作

    Sa-Token 是一个轻量级 java 权限认证框架,主要解决登录认证、权限认证、单点登录、OAuth2、微服务网关鉴权 等一系列权限相关问题。 Gitee 开源地址:https://gitee.com/dromara/sa-token 本篇将介绍 Sa-Token 中的多账号认证操作。 有的时候,我们会在一个项目中设计两套账号体系,比如

    2024年02月16日
    浏览(32)
  • 使用 Sa-Token 完成踢人下线功能

    在企业级项目中,踢人下线是一个很常见的需求,如果要设计比较完善的话,至少需要以下功能点: 可以根据用户 userId 踢出指定会话,对方再次访问系统会被提示:您已被踢下线,请重新登录。 可以查询出一个账号共在几个设备端登录,并返回其对应的 Token 凭证,以便后

    2024年02月03日
    浏览(39)
  • 对敏感操作的二次认证 —— 详解 Sa-Token 二级认证

    在某些敏感操作下,我们需要对已登录的会话进行二次验证。 比如代码托管平台的仓库删除操作,尽管我们已经登录了账号,当我们点击 [删除] 按钮时,还是需要再次输入一遍密码,这么做主要为了两点: 保证操作者是当前账号本人。 增加操作步骤,防止误删除重要数据。

    2024年02月12日
    浏览(36)
  • springboot整合Sa-Token实现登录认证和权限校验(万字长文)

    目前在国内的后端开发中,常用的安全框架有spring security、shiro。现在,介绍一款由国人开发的安全框架Sa-Token。这个框架完全由国人开发,所提供的Api文档和一些设置都是比较符合国人的开发习惯的,本次就来介绍一下如何在spring boot框架中整合Sa-Token框架,以实现我们最常

    2024年04月27日
    浏览(44)
  • GateWay网关自定义过滤器实现token校验完成统一鉴权

    gateWay---API网关,也可以称为业务网关,主要服务于微服务的; (1)  三大组件 路由(Route)         构建网关的基本模块,由id(唯一标示)、目标URI、一组断言、一组过滤器组成,如果断言为true,则匹配该路由   断言(Predicate)          可以使用它匹配来自HTTP请求的任何

    2024年02月08日
    浏览(51)
  • 【Sa-Token】SpringBoot 整合 Sa-Token 快速实现 API 接口签名安全校验

    在涉及跨系统接口调用时,我们容易碰到以下安全问题: 请求身份被伪造 请求参数被篡改 请求被抓包,然后重放攻击 sa-token api-sign 模块将帮你轻松解决以上难题。(此插件是内嵌到 sa-token-core 核心包中的模块,开发者无需再次引入其它依赖,插件直接可用) 假设我们有如

    2024年02月17日
    浏览(48)
  • Springcloud gateway网关+认证服务+token方式,入口层认证统一微服务鉴权【设计实践】

    目录 背景 实现 gateway maven配置 yml配置 页面登录拦截配置类 白名单配置 token工具类 登录配置类 全局过滤器类 项目启动类 分布式项目的单点登录分为认证服务(单点登录服务端)和业务服务(单点登录客户端)两个角色, 当访问业务服务时,认证服务客户端SDK校验一下是否

    2024年02月15日
    浏览(49)
  • Sa-Token浅谈

    主要介绍Sa-Token的鉴权使用以及实现原理。 官网介绍的非常详细,主要突出这是一个轻量级鉴权框架的特点,详情可自行访问:https://sa-token.dev33.cn/doc.html#/ 旨在简单使用,大部分功能均可以在一行代码内实现,这里举几个官网示例: 首先添加依赖: yaml配置文件: 功能图如下

    2024年02月09日
    浏览(56)
  • Sa-Token组件介绍

    个人博客:无奈何杨(wnhyang) 个人语雀:wnhyang 共享语雀:在线知识共享 Github:wnhyang - Overview 前文讲了Sa-Token介绍与SpringBoot环境下使用,但是 satoken 最重要的登录鉴权直接略过了,那这篇文章就开讲,😂当然不是啦。看标题就知道这次要讲的是 satoken 组件,为什么这么安排

    2024年01月20日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包