Requisitos: El proyecto necesita modificar dinámicamente los parámetros de la solicitud, asignar valores a los parámetros de la solicitud según los permisos del usuario actual, antes de que los parámetros entren en el método del controlador, debe completarse la modificación de los parámetros de la solicitud y, cuando el controlador llama a la capa de servicio, los parámetros de la solicitud pueden usarse como condiciones para consultar y modificar los datos. Hay dos casos de parámetros de solicitud:
- Para usuarios con altos privilegios, puedes usar los valores reales de los parámetros solicitados
- Para personas con permisos solo parciales, los valores de los parámetros de solicitud se modifican dinámicamente en función de la información vinculada al usuario actual
Al principio quería implementarlo mediante un filtro, pero era demasiado engorroso serializar y desserializar el contenido de la petición, y también requería mucho juicio lógico y pérdida de rendimiento. Afortunadamente, Spring ofrece funcionalidad orientada a cara de AOP, que puede implementarse con código sencillo.
En primer lugar, el proyecto Maven pom.xml necesita introducir el paquete spring-boot-starter-aop, de la siguiente manera:
Una vez introducido el paquete, podemos usar la función AOP, a través de@Aspectanotación.
Aspect soporta 5 tipos de anotaciones de notificación:
@Before: Prenotificación, que se ejecuta antes de ejecutar el método
@After: Post-notificación, ejecutada después de que el método se ejecute
@AfterRunning: Devuelve una notificación, que se ejecuta después de que el método devuelve un resultado
@AfterThrowing: Notificación de excepciones, después de que el método lanza una excepción
@Around: Notificaciones de wraparound, alrededor de la ejecución del método
Crea una clase envoltoria de petición genérica Request.java:
Crea una nueva clase de datos UserInfo.java solicita específica:
Si el encabezado de solicitud actual tiene un appid, el valor del parámetro de solicitud appId se modificará; de lo contrario, el parámetro de solicitud no se modificará; el código es el siguiente:
Crea un nuevo controlador HomeController y añade una interfaz con un parámetro de solicitud que contenga Request<UserInfo>, el código es el siguiente:
En el caso de pruebas sin el encabezado de solicitud appId, el parámetro de solicitud appId es el valor real y no ha sido modificado, como se muestra en la siguiente figura:
Si intentas añadir la cabecera de solicitud appId, puedes ver que el parámetro de solicitud appId ha sido modificado con éxito, como se muestra en la siguiente figura:
Finalmente, adjunta el código fuente:El inicio de sesión del hipervínculo es visible.
|