mall :sa-token项目源码解析

一、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。

具体步骤如下:

Insérer la description de l'image ici

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 :

Insérer la description de l'image ici

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 :

Insérer la description de l'image ici

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 :

Insérer la description de l'image ici

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-tokenla 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 documentdossier 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 .

Insérer la description de l'image ici

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 .

Insérer la description de l'image ici

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) NotLoginExceptionseront renvoyées en fonction des informations de retour personnalisées .状态码401未提供token

Insérer la description de l'image ici

3.1.4 Stockage des informations utilisateur

Il y a deux utilisateurs, adminl'utilisateur a ROLE_ADMINun rôle et macrol'utilisateur a ROLE_USERun 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.

Insérer la description de l'image ici

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.

Insérer la description de l'image ici

ps : La liste blanche personnalisée est application.ymlles informations obtenues à partir du fichier.

Insérer la description de l'image ici

3.2.2 Interprétation du code métier de connexion

1. Il y a d'abord la couche de contrôle, UmsAdminControllerajoutez-y une interface de connexion login.

Insérer la description de l'image ici

2. Ensuite, dans la couche métier, UmsAdminServiceImplajoutez 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.

Insérer la description de l'image ici

3.2.3 测试登录

方式一:使用Postman测试

Insérer la description de l'image ici

方式二:使用swagger接口文档测试(建议使用,以及编写好,直接访问即可测试,访问地址为: Swagger UI ),由于已经拿到token,就不做重复测试了,直接测另一个接口,查询当前登录状态的接口。

Insérer la description de l'image ici

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")才能匹配到模拟的数据库的角色信息。权限信息也是同理,不一一列举了。

Insérer la description de l'image ici

3.3.2 配置拦截器

在拦截器中配置路由规则,ROLE_ADMIN角色可以访问所有路径,而ROLE_USER只能访问/brand/listAll路径。

Insérer la description de l'image ici

3.3.3 测试角色

对于 admin用户具有ROLE_ADMIN角色,macro用户具有ROLE_USER角色 。

  • 使用admin账号访问/brand/{id}接口可以正常访问
  • macroL'interface d'accès au compte /brand/{id}n'est pas accessible normalement et le retour codeest403

Nous ne testerons pas l'administrateur ici. Ce qui suit est macro用户un test pour voir l'effet de ne pas avoir d'autorisation.

Insérer la description de l'image ici

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.3pour la description, sans entrer trop dans les détails.

Lorsque l'utilisateur n'a pas l'autorisation d'accéder, Sa-Token lèvera NotPermissionExceptionune exception.

3.4.1 Configuration des intercepteurs

Configurez les règles de routage pour l'intercepteur . adminLes utilisateurs peuvent accéder à tous les chemins, mais macroils disposent uniquement d'autorisations de lecture et n'ont pas d'autorisations d'écriture, de modification ou de suppression.

Insérer la description de l'image ici

3.4.2 Tester les autorisations

Tous les chemins sont accessibles à adminl'utilisateur, mais macrol'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 adminl'interface d'accès au compte ./brand/delete
  • L'accès normal n'est pas accessible à l'aide macrodu compte et le retour est/brand/deletecode403

Nous ne testerons pas l'administrateur ici. Ce qui suit est macro用户un test pour voir l'effet de ne pas avoir d'autorisation.

Insérer la description de l'image ici

4. Résumé

Dans cet article, j'ai d'abord obtenu les exigences du projet réel, afin d' apprendre SpringSecurityet 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.

七夕~盈若安好,便是晴天

Je suppose que tu aimes

Origine blog.csdn.net/qq_51601665/article/details/132429652
conseillé
Classement