1. Descripción general
En el proceso de diseño del sistema de aplicaciones Java, la autenticación del usuario, la autorización del usuario y la autenticación son temas inevitables.
Si el diseño de esta gestión de permisos no está aislado del sistema empresarial y no es lo suficientemente escalable, se retrasará fácilmente.
Los estudiantes que hayan realizado desarrollo deben comprender este problema.
Los frameworks más populares para la gestión de permisos en Internet ahora incluyen Apache Shiro, Spring Security y Sa-Token (un framework nuevo y excelente).
Algunos estudiantes aquí dirán, dado que ya existen tantos marcos de gestión de permisos maduros y excelentes, ¿por qué debería presentarles esta idea de implementación nuevamente?
En el proceso de mi trabajo y estudio, a menudo utilizo estos excelentes marcos de gestión de permisos.
Sin embargo, una vez que hay anomalías y problemas en estos marcos de terceros, es más problemático solucionarlos. O simplemente confíe en la experiencia de todos en Baidu. O simplemente revise el código y compruébelo poco a poco.
El marco de terceros es como una caja negra para nosotros, los usuarios. Esto siempre me ha hecho sentir un poco incómodo.
Estudiantes que no quieren un marco de gestión de permisos que conozca bien.
2. Experiencia de uso del framework
2.1 Configuración de inicialización del proyecto
Springboot es lo mismo.
Introducir dependencia pom:
Modificar archivo de configuración:
2.2 Inicio de sesión de usuario
Personalizar una clase de credencial
Personalice un autenticador de credenciales:
Este autenticador es muy simple. La contraseña de administrador predeterminada es 123456 y luego se le asignan roles fijos y todos los recursos. En aplicaciones reales, los permisos del usuario deben obtenerse de la base de datos y la autoridad de seguridad devuelta debe organizarse.
Interfaz de autenticación abierta:
2.3 Verificación de permisos
Autenticación de nivel de enrutamiento:
No se requiere configuración adicional, solo agregue @ HasUrl obtenga la dirección URL actual de la capa Controlador y verifique si el usuario tiene permiso para acceder a la URL.
Y coloque la información del usuario analizada en el parámetro SecurityAuthority del método.
En el primer paso, cuando el usuario inicia sesión, SecurityRes.allUrlRes() se proporciona de forma predeterminada y /* está configurado. * Derechos de acceso URL.
Autenticación a nivel de método
Verificar si el usuario ha iniciado sesión
3. Hora, lugar y persona
Si desea describir una cosa, lo harás. Después de presentar la hora, el lugar y los personajes, las cosas se pueden describir claramente.
Introducir esta idea de diseño también requiere introducir la premisa:
3.1 Cuándo utilizar este marco
Obviamente, si el sistema necesita proporcionar autenticación de usuario, autorización de usuario , autenticación de usuario Al acceder a los derechos, necesita un módulo de gestión de permisos.
Todo el proceso debe ser:
Autenticación de usuario--gt; Emisión de token (autorización de usuario)--gt; Autenticación de usuario--gt; p > 3.2 ¿Qué capacidades proporciona el marco?
Las capacidades anteriores son la gestión de permisos más básica.
3.3 ¿Qué componentes abstractos debe tener el framework?
Esta pregunta es algo en lo que los programadores Java que desarrollan orientado a objetos deben pensar detenidamente, es decir, cuando recibe un requisito, ¿cómo utilizarlo de forma orientada a objetos? ¿Utilizar el pensamiento de objetos para analizar y diseñar programas para completar los requisitos?
3.3.1 Autenticación de usuario
El escenario más común para la autenticación de usuario es el inicio de sesión con nombre de usuario y contraseña.
En este escenario, puede haber:
Nombre de usuario y contraseña, código de verificación de nombre de usuario y contraseña, código de verificación de número de teléfono móvil, código de verificación de correo electrónico... tantos métodos de inicio de sesión.
Por lo general, para verificar si la información de inicio de sesión es legal, generalmente es necesario leer la información de registro del usuario de la base de datos para completar la autenticación.
Las clases que se pueden abstraer en este escenario son:
1. Clase de credencial: nombre de usuario y contraseña, código de verificación de nombre de usuario y contraseña, código de verificación de número de teléfono móvil, código de verificación de correo electrónico. .. ...
2. Validador de credenciales: se utiliza para verificar si las credenciales cargadas por el usuario son legales.
3.3.2 Autorización del usuario
Cuando el usuario completa la verificación de la credencial de autenticación, el servidor debe devolver una contraseña (token) del usuario para que la utilice.
Y el token del usuario debe estar asociado y llevar a cabo todos los permisos de recursos vinculados al usuario, así como la función, el departamento, el puesto y otra información.
Los recursos de usuario se dividen en:
Recursos estáticos:
Recursos estáticos como menús y botones
Recursos estáticos como documentos y imágenes
Recursos dinámicos:
Permisos CURD en ciertos recursos: por ejemplo, si CURD se puede realizar en los datos de la tabla sys_user.
Clases que se pueden abstraer en este escenario:
Algunos de los puestos y departamentos no están incluidos en el marco de gestión de autoridad, y algunos pueden tener uno. Este problema no está incluido aquí. , ya sea que los departamentos y puestos en realidad proporcionen una dimensión para juzgar los permisos, y los tipos le den a los usuarios una etiqueta.
3.3.3 Gestión de tokens
Después de generar tokens de usuario, es necesario gestionar todos los tokens. Se puede utilizar para estadísticas y mantenimiento.
Por lo tanto, es necesario establecer una relación de mapeo entre la información de la clase de descripción del permiso del usuario obtenida en el paso anterior y el token. De esta forma, se puede obtener diversa información del usuario a través del token.
Clases que se pueden abstraer de este escenario:
Clase de gestión de tokens: se utiliza para gestionar todos los tokens generados. Y establecer la relación entre la información del usuario y el token.
3.3.4 Autenticación de usuario
Cuando el usuario pasa la autenticación de usuario y la autorización de usuario, se obtiene su contraseña token.
Cada vez que un usuario accede a un recurso de servicio, debe traer un token. Cuando el servidor recibe la solicitud, necesita obtener toda la información de permiso del usuario a través del token para determinar si el usuario puede. acceder al recurso actual.
Parece que no hay ninguna clase que pueda extraerse de este escenario, pero necesitamos encontrar una solución de autenticación de usuario.
Aquí, según la experiencia pasada, la programación de aspectos AOP basada en Spring debería ser la forma más fácil de usar
Así que aquí hay un resumen de los tipos de autenticación que necesitamos: p >
4. Resumen
He expuesto mucho arriba, pero solo quiero que todos tengan la misma comprensión que el autor.
Primero clasifiquemos las categorías resumidas anteriormente.
Clase de credencial, validador de clase de credencial, generador de tokens, administrador de tokens.
Y, esquema de autenticación de usuarios basado en AOP.
Idea general:
Continuará. . .