文章目录
一、mall开源项目
1.1 来源
mall学习教程,架构、业务、技术要点全方位解析。mall项目(50k+star)是一套电商系统,使用现阶段主流技术实现。涵盖了SpringBoot 2.3.0、MyBatis 3.4.6、Elasticsearch 7.6.2、RabbitMQ 3.7.15、Redis 5.0、MongoDB 4.2.5、Mysql5.7等技术,采用Docker容器化部署。
项目github地址: mall开源项目
1.2 项目转移
可以把github上的项目转移到gitee上,方便克隆到idea。
具体步骤如下:
1.3 项目克隆
由于github部署在国外,虽然idea也支持从github上拉取,但是克隆速度太慢,所以才推荐上述导入gitee后在克隆项目到idea。
具体的克隆步骤过于简单和常规化,读者可自行完成,或百度一下~
二、Sa-Toekn框架
2.1 Sa-Token 简介
Sa-Token est un cadre d'authentification d'autorisation Java léger qui résout principalement une série de problèmes liés aux autorisations tels que l'authentification de connexion , l'authentification d'autorisation , l'authentification unique , OAuth2.0 , la session de session distribuée , l'authentification de passerelle de microservice , etc.
Sa-Token dispose actuellement de cinq modules fonctionnels principaux : authentification de connexion, authentification d'autorité, authentification unique, OAuth2.0 et authentification de microservice.
L'aperçu des fonctions est le suivant :
Adresse du document de développement sa-token : sa-token.cc
2.2 Processus d'utilisation des projets back-end distribués
La figure ci-dessous est un processus d'utilisation de base résumé par moi-même sur la base de l'expérience du projet et des informations de recherche Baidu.
L'organigramme d'utilisation de sa-token est le suivant :
2.3 Scénarios d'utilisation de projets backend distribués
L'image ci-dessous est un scénario d'utilisation de base résumé par moi-même, basé sur l'expérience du projet et les informations de recherche Baidu.
Le diagramme de scénario d'utilisation de sa-token est le suivant :
3. Analyse du code source
En regardant le code source, j'ai résumé les étapes de base lors de l'examen d'un nouveau projet : d'abord, examiner l'intégration et la configuration, puis les analyser d'un point de vue commercial et combiner le cadre intégré et les composants pour explorer l'architecture du système à son tour.
Contenu de l'analyse : La plupart du contenu de l'analyse ci-dessous est expliqué dans la figure, et je n'élaborerai pas trop en dehors.
3.1 Intégration et configuration
Prenez l'analyse du code source directement et analysez uniquement les parties liées au jeton sa. Les lecteurs des autres parties sont invités à lire eux-mêmes l'analyse du code source.
Démarrage du projet : Seule mall-tiny-sa-token
la partie module doit être démarrée.
Requis au démarrage : Démarrez le service mysql5, créez une base de données et importez les tables (l'emplacement du fichier sql est dans un document
dossier au même niveau du projet).
ps : Pensez à modifier les informations de configuration de la connexion à la base de données.
3.1.1 Importer les dépendances
pom文件
Importez les dépendances pertinentes de sa-token dans .
3.1.2 Ajouter une configuration
Ajoutez la configuration appropriée de sa-token dans application.yml
. Le projet prend en charge les projets de séparation front-end et back-end. Désactivez la lecture du jeton à partir du cookie et modifiez la configuration de la lecture du jeton à partir de head .
3.1.3 Gestion des exceptions
Pour gérer les exceptions qui ne sont pas connectées, qui n'ont aucune autorisation et qui n'ont aucun rôle, vous devez les gérer globalement.
Prenons la connexion comme petit exemple : Sa-Token lèvera une exception en raison de l'accès à l'interface sans se connecter. À ce stade, les informations de retour et de réponse (informations de résultat de la gestion des exceptions) NotLoginException
seront renvoyées en fonction des informations de retour personnalisées .状态码401
未提供token
3.1.4 Stockage des informations utilisateur
Il y a deux utilisateurs, admin
l'utilisateur a ROLE_ADMIN
un rôle et macro
l'utilisateur a ROLE_USER
un rôle.
**ps :** Les informations associées des deux tables de la base de données simulée sont liées en fonction de l'ID, c'est-à-dire de l'attribution de rôles aux utilisateurs.
3.2 Authentification de connexion
3.2.1 Configurer les listes noire et blanche
Dans le système de gestion, en plus de l'interface de connexion, l'authentification de connexion est essentiellement requise.Il est plus pratique d'utiliser l'authentification d'interception de routage dans le jeton sa.C'est-à-dire de configurer l'intercepteur pour le jeton sa, d'implémenter l'interface et configurer la liste noire et blanche WebMvcConfigurer
.
ps : La liste blanche personnalisée est application.yml
les informations obtenues à partir du fichier.
3.2.2 Interprétation du code métier de connexion
1. Il y a d'abord la couche de contrôle, UmsAdminController
ajoutez-y une interface de connexion login
.
2. Ensuite, dans la couche métier, UmsAdminServiceImpl
ajoutez la logique spécifique de connexion, vérifiez d'abord le mot de passe, puis appelez-le StpUtil.login(adminUser.getId())
pour obtenir la connexion.
3.2.3 测试登录
方式一:使用Postman
测试
方式二:使用swagger
接口文档测试(建议使用,以及编写好,直接访问即可测试,访问地址为: Swagger UI ),由于已经拿到token,就不做重复测试了,直接测另一个接口,查询当前登录状态的接口。
3.3 角色认证
紧接上文,我来实现一下吧!对于角色认证也就是定义好一套访问接口的规则,比如ROLE-ADMIN
角色可以访问/brand
下的所有资源,而ROLE_USER
角色只能访问/brand/listAll
下的资源。
配置全局异常:见副标题3.1.3
有所描述,不做过多陈诉。
当用户不是被允许的角色访问时,Sa-Token会抛出NotRoleException
异常。
3.3.1 权限验证接口扩展
扩展 sa-token的StpInterface
接口,重写方法来返回用户的角色名称和角色权限列表。
由于StpInterfaceImpl
实现了StpInterface
接口,重写了里面的方法。所以在SaTokenConfig
的配置文件中的StpUtil.checkRole("ROLE_ADMIN")
才能匹配到模拟的数据库的角色信息。权限信息也是同理,不一一列举了。
3.3.2 配置拦截器
在拦截器中配置路由规则,ROLE_ADMIN
角色可以访问所有路径,而ROLE_USER
只能访问/brand/listAll
路径。
3.3.3 测试角色
对于 admin
用户具有ROLE_ADMIN
角色,macro
用户具有ROLE_USER
角色 。
- 使用
admin
账号访问/brand/{id}
接口可以正常访问 macro
L'interface d'accès au compte/brand/{id}
n'est pas accessible normalement et le retourcode
est403
Nous ne testerons pas l'administrateur ici. Ce qui suit est macro用户
un test pour voir l'effet de ne pas avoir d'autorisation.
3.4 Authentification des autorisations
Lorsque des autorisations sont attribuées à des rôles , puis que des rôles sont attribués à des utilisateurs , ces derniers disposent de ces autorisations.
Pour l'authentification des autorisations, vous pouvez également attribuer différentes autorisations à chaque interface , et les utilisateurs disposant de cette autorisation peuvent accéder à l'interface.
Configuration des exceptions globales : Voir le sous-titre 3.1.3
pour la description, sans entrer trop dans les détails.
Lorsque l'utilisateur n'a pas l'autorisation d'accéder, Sa-Token lèvera NotPermissionException
une exception.
3.4.1 Configuration des intercepteurs
Configurez les règles de routage pour l'intercepteur . admin
Les utilisateurs peuvent accéder à tous les chemins, mais macro
ils disposent uniquement d'autorisations de lecture et n'ont pas d'autorisations d'écriture, de modification ou de suppression.
3.4.2 Tester les autorisations
Tous les chemins sont accessibles à admin
l'utilisateur, mais macro
l'utilisateur dispose uniquement d'autorisations de lecture et n'a pas d'autorisations d'écriture, de modification ou de suppression.
- Vous pouvez y accéder normalement en utilisant
admin
l'interface d'accès au compte ./brand/delete
- L'accès normal n'est pas accessible à l'aide
macro
du compte et le retour est/brand/delete
code
403
Nous ne testerons pas l'administrateur ici. Ce qui suit est macro用户
un test pour voir l'effet de ne pas avoir d'autorisation.
4. Résumé
Dans cet article, j'ai d'abord obtenu les exigences du projet réel, afin d' apprendre SpringSecurity
et de combiner le code source pour apprendre. Dans un autre projet, puisque l'authentification a été déployée sur une IP différente, le projet peut être appelé .Oath2
est utilisé dans le projet. Il s'agit d'un cadre d'authentification d'autorité Java léger. Vous pouvez le voir clairement sur le site officiel, mais je ne sais pas par où commencer, j'ai donc écrit cet article. J'ai beaucoup appris sur sa-token à partir de projets open source. J'espère que cet article vous sera également utile.mall
À l'avenir, je combinerai également ce cadre pour apprendre d'autres piles technologiques.
七夕~盈若安好,便是晴天