实现和测试全局锁

92 未经授权,禁止转载了解课程
课程介绍
讨论{{interaction.discussNum ? '(' + interaction.discussNum + ')' : ''}}
适合人群
有一定基础的 Go 语言初学者; 有一定编程经验的 Go 程序员, 寻求在 Java 中寻找业务灵感; Java 转 Go 程序员, 需要项目练手; 对于有状态登录业务场景有明确需求的同学.
你将会学到
你将掌握 Sa-Token 的核心原理和方法, 并能够使用 Go 语言进行实现.
  • 掌握有状态登录的核心原理, 补齐登录和鉴权相关业务知识盲区
  • 学会阅读 Java 源码, 并使用 Go 语言进行实现
  • 学会编写 Go 语言测试, 并体会测试对于开发工作的提升
  • 学会 Redlock 分布式锁的使用, 深刻理解如何实现分布式并发安全
  • 学会如何实现缓存接口方法的原子性
课程简介

Sa-Tokne 简介

Sa-Token 是国人编写的 Java 轻量级权限认证框架, Github 16k stars, Gitee 46k stars, 同时也是 Gitee GVP 项目

项目地址: https://gitee.com/dromara/sa-token

已经有一些开源项目使用或改用了 Sa-Token, 未来可能会更多. ( 如果你在别处看到 Sa-Token 有坑而犹豫, 本课程提供的 Go 语言实现版已经修复了并发安全的问题)

sa-token.png


Go 语言认证和鉴权现状

go-jwt.png


Go 语言 Web 后端项目基本使用 JWT 进行认证, 自研或使用 Casbin 进行鉴权, 因为缺乏统一的标准, 所以在实现上往往有很大的差异. 一方面给源码阅读带来了困难 (即使不算很复杂的业务), 另一方面也不利于去把握认证和鉴权业务的核心 (知识不成体系化).


如果能够学习和借鉴老牌后端开发语言 Java 在认证和鉴权这部分业务的理解和实现, 对于 Go 程序员提升对于认证和鉴权业务的理解非常有帮助. 考虑到项目代码的规模和实现的难度, 所以选择 Sa-Token 作为突破口, 进行专项学习.


Go 语言实现版 Stoken 的功能和方法

stoken.png



Stoken 功能展示

image.png

image.png


Stoken 核心原理


stoken基本原理.png

不涉及复杂算法, 仅仅是通过操作缓存中的 key/value 和 Session 实现认证鉴权功能.


Stoken 项目结构

image.png

学完本课程你将会获得什么?

  1. 补齐有状态登录的知识盲区,完善认证鉴权相关业务知识体系.

  2. 掌握 Sa-Token 的核心原理, 实现 Sa-Token 核心功能.

  3. 能够阅读 Java 代码, 并用 Go 语言实现, 尤其对于 Web 后端 Go 程序员是很好的加分项, 本课程算是一个不错的开始和尝试.

  4. 掌握如何写 Go 语言单元测试.


适用于哪些同学?

  1. Go 语言初学者, 厌倦了入门项目, 想要学习真正的实战项目.

  2. Java 转 Go 的同学, 对照 Java 源码进行 Go 编程, 实现知识迁移, 快速学习.

  3. 对于有状态登录的业务场景有需求的同学 (强注销, 单端登录, 多端登录等...).

  4. 有经验的 Go 程序员, 寻求在 Java 中获得业务灵感, 但是无法绕开登录鉴权相关业务逻辑.


学这门课需要的技术基础

  1. 了解 Go 语言基础知识.

  2. 了解 Redis 字符串类型相关命令: GET, SET, TTL, EXPIRE.

  3. 了解 Gin 的基础使用 (仅在适配接口和示例展示中使用).

Stoken 实现了什么

  1. 使用 Go 语言实现了 Sa-Token 的登录和鉴权的核心功能, 并配以测试代码, 确保功能的正确性.

  2. 通过增加分布式锁和删除部分非必要功能, 实现了 Sa-Token 的并发安全, 原 Sa-Token 代码可能存在一定的并发安全问题.

Stoken 没有实现什么

  1. Sa-Token 微服务部分没有实现

  2. 当前版本教程不支持 JWT 和 OAuth2, 之后会更新支持 (2024年12月份之前)


课程更新频率

1. 跟随 Sa-Token 大版本更新 (如果 Sa-Token 对核心功能进行了更新).

2. 根据学员反馈的 bug 或者其他问题进行更新.


教学方式

教学方式.png

左侧 Java 源码, 右侧 Go 语言实现, 先简单过一下 Java 源码, 然后从零开始进行 Go 语言实现. 本课程强调要写代码, 主打沉浸式编程.


学习编程的核心是初期多写代码, 一定要写出手感. Stoken 项目总代码量约 3400 行, 约 1900 行左右功能实现, 1500 行左右测试代码.


环境准备

Windows 下个人强烈推荐安装 WSL: 安装 WSL | Microsoft Learn


VSCode:      在 Windows 安装

Java 环境:    Java8 ~ Java21 均可

Go 环境:      需要 GO 1.22.5 (redlock 和 slog 需要高版本)

Redis 实例:  Redis 版本 6.0 以上

apifox:        用作 Gin 示例的测试, 注册需要手机号, 如果在意个人隐私, 可以考虑其他测试软件, 不影响课程本身


课程答疑


扫码加课程答疑群, 课程答疑, Bug反馈等.

微信群.png



常见问题
问:没有基础可以学吗?
答:完全没有 Go 语言基础学习本课程有点困难, 建议先自学一下 Go 语言, 掌握 Go 语言的基础知识.
问:多久可以学完?
答:本课程长度 31 小时左右, 在学习完成之后, 个人建议要自己参照 Java 源码再实现一遍, 以提升自己的 Go 语言编程水平.
问:课程学完后能到什么水平?
答:因为是专项课程, 本课程的主要目标是补齐 Go 程序员在登录鉴权业务理解方面的短板, 掌握 Sa-Token 核心原理确实可以在一些场合成为很好的谈资 (比如面试, 比如评职级)
展开更多
发布
头像

{{ item.user.nick_name }} {{ EROLE_NAME[item.user.identity] }}

置顶笔记
讨论图
{{ item.create_time }}回复
  • 删除

    是否确认删除?

    确认
    取消
  • {{ item.is_top == 1 ? '取消置顶' : '置顶'}}

    已有置顶的讨论,是否替换已有的置顶?

    确认
    取消
{{ tag.text}}
头像
{{ subitem.user.nick_name }}{{ EROLE_NAME[subitem.user.identity] }}
{{ subitem.create_time }}回复
删除

是否确认删除?

确认
取消
发布
{{pageType === 'video' ? '讨论区抢占沙发,可获得双倍学分' :'讨论区空空如也,你来讲两句~'}}
发布
{{tips.text}}
{{ noteHeaderTitle }} 笔记{{ hasMyNote ? '我的笔记' : '记笔记' }}
{{ hasMyNote ? '我的笔记' : '记笔记' }}
优质笔记
更新于:{{ $dayjs.formate('YYYY-MM-DD HH:mm:ss', item.last_uptime*1000) }}
头像
{{ detail.username }}

公开笔记对他人可见,有机会被管理员评为“优质笔记”

{{ noteEditor.content.length }}/2000

公开笔记
保存
提问

讲师收到你的提问会尽快为你解答。若选择公开提问,可以获得更多学员的帮助。

记录时间点
记录提问时视频播放的时间点,便于后续查看
公开提问
提交