Dirección de interfaz de usuario: https://github.com/wang926454/VueStudy/tree/master/VueStudy08-JWT
Si tienes alguna duda, escanea el código y únete al grupo QQ para comunicarte: 779168604
- Primero, publique el nombre de usuario y la contraseña en usuario/inicio de sesión para iniciar sesión. Si tiene éxito, se devolverá el AccessToken cifrado. Si falla, se devolverá un error 401 directamente (la cuenta o la contraseña son incorrectas).
- Simplemente traiga este AccessToken para futuras visitas.
- El proceso de autenticación principalmente reescribe el filtro de entrada JWTFilter ( BasicHttpAuthenticationFilter ) de Shiro para determinar si el encabezado de la solicitud contiene el campo Autorización .
- En caso afirmativo, realice la autenticación y autorización de inicio de sesión del token de Shiro (cada solicitud de acceso de usuario que requiera permiso debe agregar el campo Autorización en el encabezado para almacenar el AccessToken ); de lo contrario, use el acceso directo como visitante (si hay control de permisos). , el acceso de los visitantes será interceptado)
La mayoría de ellos resuelven este problema en forma de MD5 + salt (detalles de Baidu). Yo uso AES-128 + Base64 para cifrar la contraseña en forma de cuenta + contraseña. Debido a que la cuenta es única, no aparecerá la misma estructura. El problema de la contraseña secreta.
Originalmente, JedisUtil se inyectaba directamente como Bean . Cada vez que se usaba, se podía inyectar directamente
@Autowired
. Sin embargo, después de reescribir el CustomCache de Shiro , JedisUtil no se podía inyectar, por lo que se cambió a inyección estática en JedisPool. grupo de conexiones La clase de herramienta JedisUtil todavía llama directamente al método estático. No es necesario inyectar@Autowired
- Después de pasar la autenticación de inicio de sesión, se devuelve la información de AccessToken ( la marca de tiempo actual y el número de cuenta se guardan en AccessToken )
- Al mismo tiempo, configure un RefreshToken en Redis con la cuenta como clave y el valor como marca de tiempo actual (hora de inicio de sesión)
- Ahora, durante la autenticación, el AccessToken no debe haber caducado y el RefreshToken correspondiente debe existir en Redis , y la marca de tiempo del RefreshToken debe ser coherente con la marca de tiempo en la información de AccessToken antes de que se pase la autenticación. Esto puede lograr la controlabilidad de JWT.
- Si inicia sesión nuevamente y obtiene un nuevo AccessToken , el antiguo AccessToken no se puede autenticar, porque la información de la marca de tiempo del RefreshToken almacenada en Redis solo será consistente con la marca de tiempo contenida en la última información del AccessToken generada , por lo que cada usuario solo puede usar el último AccessToken. proceso de dar un título
- El RefreshToken de Redis también se puede utilizar para determinar si un usuario está en línea. Si se elimina un Redis RefreshToken , el AccessToken correspondiente a este RefreshToken ya no podrá pasar la autenticación. Esto equivale a controlar el inicio de sesión del usuario y eliminarlo. .
- El tiempo de vencimiento de AccessToken en sí es de 5 minutos (configurable en el archivo de configuración) y el tiempo de vencimiento de RefreshToken es de 30 minutos (configurable en el archivo de configuración)
- Cuando hayan pasado 5 minutos después de iniciar sesión, el AccessToken actual caducará. Si vuelve a traer el AccessToken para acceder a JWT, se generará una excepción TokenExpiredException , lo que indica que el Token ha caducado.
- Comience a determinar si actualizar AccessToken . Redis consulta si existe el RefreshToken del usuario actual y si la marca de tiempo que lleva este RefreshToken es coherente con la marca de tiempo que lleva el AccessToken caducado.
- Si existe y es consistente, actualice AccessToken, establezca el tiempo de vencimiento en 5 minutos (configurable en el archivo de configuración), la marca de tiempo en la última marca de tiempo y también configure la marca de tiempo en RefreshToken en la última marca de tiempo y actualice la fecha de vencimiento. tiempo a 30 nuevamente. Caducidad en minutos (configurable en el archivo de configuración).
- Finalmente, el AccessToken actualizado se almacena en el campo Autorización en el encabezado de la respuesta y se devuelve (la interfaz lo obtiene y lo reemplaza, y usa el nuevo AccessToken para acceder la próxima vez).
Primero configure el archivo srcmainresourcesgeneratorgeneratorConfig.xml (la configuración predeterminada está en el paquete inverso en el nivel inferior del paquete original) y ejecútelo en la ventana de línea de comando del directorio de nivel pom.xml ( es decir, en el directorio raíz del proyecto) (La premisa es que mvn está configurado) (IDEA se puede ejecutar directamente haciendo doble clic en los complementos de la ventana de Maven)
mvn mybatis-generator:generate
先设置Content - Type为application / json
然后填写请求参数帐号密码信息
进行请求访问,请求访问成功
点击查看Header信息的Authorization属性即是Token字段
访问需要权限的请求将Token字段放在Header信息的Authorization属性访问即可
Token的自动刷新也是在Token失效时返回新的Token在Header信息的Authorization属性