Adresse frontale : https://github.com/wang926454/VueStudy/tree/master/VueStudy08-JWT
Si vous avez des questions, veuillez scanner le code et rejoindre le groupe QQ pour communiquer : 779168604
- Tout d’abord, publiez le nom d’utilisateur et le mot de passe sur user/login pour vous connecter. En cas de succès, le AccessToken crypté sera renvoyé. En cas d’échec, une erreur 401 sera renvoyée directement (le compte ou le mot de passe est incorrect).
- Apportez simplement cet AccessToken avec vous pour de futures visites.
- Le processus d'authentification réécrit principalement le filtre d'entrée de Shiro JWTFilter ( BasicHttpAuthenticationFilter ) pour déterminer si l' en-tête de la demande contient le champ Autorisation .
- Si oui, effectuez l'authentification et l'autorisation de connexion au jeton de Shiro (chaque demande d'accès utilisateur nécessitant une autorisation doit ajouter le champ Autorisation dans l'en-tête pour stocker le AccessToken ), sinon, utilisez l'accès direct en tant que visiteur (s'il existe un contrôle d'autorisation , l'accès des visiteurs sera intercepté)
La plupart d'entre eux résolvent ce problème sous la forme de MD5 + salt (détails de Baidu). J'utilise AES-128 + Base64 pour crypter le mot de passe sous forme de compte + mot de passe. Le compte étant unique, la même structure n'apparaîtra pas. .Le problème du mot de passe secret
À l'origine, JedisUtil était directement injecté en tant que Bean . Chaque fois qu'il est utilisé, il peut être injecté directement
@Autowired
Cependant, après avoir réécrit le CustomCache de Shiro , JedisUtil n'a pas pu être injecté, il a donc été remplacé par une injection statique dans le JedisPool. pool de connexions La classe d'outils JedisUtil appelle toujours directement la méthode statique Pas besoin d'injection@Autowired
.
- Une fois l'authentification de connexion réussie, les informations AccessToken sont renvoyées ( l'horodatage actuel et le numéro de compte sont enregistrés dans AccessToken ).
- En même temps, définissez un RefreshToken dans Redis avec le compte comme clé et la valeur comme horodatage actuel (heure de connexion)
- Désormais, lors de l'authentification, l'AccessToken ne doit pas avoir expiré et le RefreshToken correspondant doit exister dans Redis , et l'horodatage RefreshToken doit être cohérent avec l'horodatage des informations AccessToken avant que l'authentification ne soit transmise. Cela peut permettre la contrôlabilité de JWT.
- Si vous vous reconnectez et obtenez un nouveau AccessToken , l'ancien AccessToken ne peut pas être authentifié, car les informations d'horodatage RefreshToken stockées dans Redis ne seront cohérentes qu'avec l'horodatage porté dans les dernières informations AccessToken générées , de sorte que chaque utilisateur ne peut utiliser que le dernier AccessToken. attestation
- Le RefreshToken de Redis peut également être utilisé pour déterminer si un utilisateur est en ligne. Si un Redis RefreshToken est supprimé, le AccessToken correspondant à ce RefreshToken ne pourra plus passer l'authentification. Cela équivaut à contrôler la connexion de l'utilisateur et à éliminer l'utilisateur. .
- Le délai d'expiration d'AccessToken lui-même est de 5 minutes (configurable dans le fichier de configuration) et le délai d'expiration de RefreshToken est de 30 minutes (configurable dans le fichier de configuration)
- Lorsque 5 minutes se sont écoulées après la connexion, le AccessToken actuel expirera. Si vous apportez à nouveau le AccessToken pour accéder à JWT, une exception TokenExpiredException sera levée, indiquant que le jeton a expiré.
- Commencez à déterminer s'il faut actualiser le AccessToken . Redis demande si le RefreshToken de l'utilisateur actuel existe et si l'horodatage porté par ce RefreshToken est cohérent avec l'horodatage porté par le AccessToken expiré.
- S'il existe et est cohérent, actualisez l'AccessToken, définissez le délai d'expiration sur 5 minutes (configurable dans le fichier de configuration), l'horodatage sur le dernier horodatage, et définissez également l'horodatage dans RefreshToken sur le dernier horodatage et actualisez l'expiration. temps à 30 à nouveau Expiration en minutes (configurable dans le fichier de configuration)
- Enfin, l' AccessToken actualisé est stocké dans le champ Autorisation de l'en-tête de la réponse et renvoyé (le front-end l'obtient et le remplace, et utilise le nouvel AccessToken pour l'accès la prochaine fois).
Configurez d'abord le fichier srcmainresourcesgeneratorgeneratorConfig.xml (la configuration par défaut se trouve sous le package reverse au niveau inférieur du package d'origine), et exécutez-le dans la fenêtre de ligne de commande du répertoire de niveau pom.xml ( c'est-à-dire sous le répertoire racine du projet) (le principe est que mvn est configuré) (IDEA peut être exécuté directement en double-cliquant dans la fenêtre Plugins de Maven)
mvn mybatis-generator:generate
先设置Content - Type为application / json
然后填写请求参数帐号密码信息
进行请求访问,请求访问成功
点击查看Header信息的Authorization属性即是Token字段
访问需要权限的请求将Token字段放在Header信息的Authorization属性访问即可
Token的自动刷新也是在Token失效时返回新的Token在Header信息的Authorization属性