Red de conocimiento informático - Problemas con los teléfonos móviles - Integración de SpringBoot y SpringSecurity - Manejo de excepciones (III)

Integración de SpringBoot y SpringSecurity - Manejo de excepciones (III)

Dirección del código fuente: /springsecuritydemo/microservice-auth-center03

Cuando falla nuestro inicio de sesión, SpringSecurity nos ayudará a saltar a la URL /login?error, pero curiosamente, la URL no está en la consola. mensaje de error impreso en la página web tampoco.

Esto se debe a que: Primero, /login?error es la URL de SpringSecurity.

Primero, /login?error es la URL de falla predeterminada de SpringSecurity; segundo, si no maneja la excepción usted mismo, no será manejada.

Enumeremos algunas excepciones comunes en SpringSecurity:

El manejo de excepciones de SpringSecurity se realiza en el filtro, y encontramos el manejo de excepciones en AbastrctAuthenticationProcessingFilter de procesamiento de autenticación:

Entonces SpringSecurity ha completado el manejo de excepciones. Resumamos el proceso:

-> AbstractAuthenticationProcessingFilter .doFilter()

-> AbstractAuthenticationProcessingFilter .p>

- > AbstractAuthenticationProcessingFilter.unsuccessfulAuthentication()

-> SimpleUrlAuthenticationFilter.doFilter()

-> SimpleUrlAuthenticationFilter.SimpleUrlAuthenticationFailureHandler.onAuthenticationFailure()

-> SimpleUrlAuthenticationFailureHandler .saveException()

Lo anterior parece bastante complicado a través del código fuente, pero cuando se trata del procesamiento real, SpringSecurity nos proporciona un método conveniente. Solo necesitamos especificar la URL del error y luego manejar la excepción en el método. .

Primero, modificamos el valor de retorno del método loadUserByUsername() de CustomUserDetailsService:

Los estudiantes cuidadosos que completen la función anterior encontrarán que cuando el nombre de usuario que ingresamos no existe, No se generará UserNameNotFoundException, pero sí BadCredentialsException. Si necesita distinguir entre un nombre de usuario inexistente y una contraseña incorrecta, consulte /wzl19870309/article/details/70314085.