Spring Song Ge te enseñó cómo personalizar el formulario de acceso Seguridad

Colección de Seguridad de primavera continúa.

Anteriores mensajes de vídeo, Song Ge y charlamos por un simple uso básico de la primavera de Seguridad, y juntos personalizar una página de acceso, a fin de buscar aún más deslumbrante número de entrada!

Hoy seguimos para llevar a esta configuración forma, la excavación en el otro lado de la configuración común aquí. El aprendizaje de este artículo, le recomendamos que nos fijamos en el pre-conocimiento ( Canción Ge manos que se inició con la primavera de Seguridad, no se preguntan cómo descifrar una contraseña ), para aprender mejor.

1. Interfaz de registro

Muchos principiantes no pueden decir a la interfaz de usuario y la página de inicio de sesión, también muy deprimido. Todavía estoy aquí para decir un poco.

página de entrada es lo que se ve fuera del navegador para mostrar la página como la siguiente:

La interfaz de usuario es el lugar para presentar los datos de registro, el valor correspondiente es el atributo de acción de la forma dentro de la forma de página de acceso.

En la primavera de Seguridad, si no hacemos ninguna configuración, las interfaces de dirección de la página de inicio de sesión predeterminado y de ingreso son /login, que es, por defecto, hay un dos solicitudes:

  • GET http: // localhost: 8080 / login
  • POSTAL http: // localhost: 8080 / login

Si se trata de una petición GET que desea visitar la página de inicio de sesión, si se trata de una petición POST, que desea enviar los datos de acceso.

En el último artículo , que SecurityConfig en la dirección de la página de inicio de sesión personalizada se define de la siguiente manera:

.and()
.formLogin()
.loginPage("/login.html")
.permitAll()
.and()

Cuando configuramos a loginPage /login.htmldespués de esta configuración, literalmente, es para establecer la dirección como la página de inicio de sesión /login.html.

De hecho, también tiene una operación oculta, la dirección de la interfaz también se establece en cartel en /login.htmlel. En otras palabras, las nuevas direcciones de las páginas de inicio de sesión y la interfaz de inicio de sesión son /login.html, en la actualidad hay dos solicitudes de la siguiente manera:

  • GET http: // localhost: 8080 / login.html
  • POSTAL http: // localhost: 8080 / login.html

Frente a la petición GET para obtener la página de inicio de sesión, la parte posterior de la solicitud POST para enviar los datos de inicio de sesión.

Algunos socio menor se sentirá extraño? ¿Por qué la página de inicio de sesión y la interfaz de configuración de inicio de sesión no pueden ser separados de ella?

De hecho, se puede configurar por separado!

En SecurityConfig, podemos especificar la dirección de la interfaz de inicio de sesión por el método loginProcessingUrl, de la siguiente manera:

.and()
.formLogin()
.loginPage("/login.html")
.loginProcessingUrl("/doLogin")
.permitAll()
.and()

Después de esta configuración, la dirección de la página de inicio de sesión y la interfaz de inicio de sesión se separaron, cada uno es su propio.

En este punto también hay que modificar el atributo de acción dentro de la página de inicio de sesión, leemos /doLoginla siguiente manera:

<form action="/doLogin" method="post">
<!--省略-->
</form>

En este caso, vuelva a iniciar el registro del proyecto, todavía podemos encontrar una conexión exitosa.

Entonces, ¿por dos direcciones de configuración es la misma que en el caso de incumplimiento de la misma?

Sabemos, formar la forma de configuración correspondiente en FormLoginConfigurer, los hereda de la clase de AbstractAuthenticationFilterConfigurer, por lo que cuando FormLoginConfigurer inicialización, AbstractAuthenticationFilterConfigurer será inicializado en el constructor AbstractAuthenticationFilterConfigurer, podemos ver:

protected AbstractAuthenticationFilterConfigurer() {
	setLoginPage("/login");
}

Esta es la configuración por defecto para el loginPage /login.

Por otro lado, el método init FormLoginConfigurer método de inicialización también llama al método init clase padre:

public void init(H http) throws Exception {
	super.init(http);
	initDefaultLoginFilter(http);
}

En el método init de la clase padre, y updateAuthenticationDefaults de llamadas, nos fijamos en este método:

protected final void updateAuthenticationDefaults() {
	if (loginProcessingUrl == null) {
		loginProcessingUrl(loginPage);
	}
	//省略
}

Desde la lógica de este enfoque, podemos ver, si el usuario no tiene que loginProcessingUrl configuración, el valor predeterminado en el uso de loginPage como loginProcessingUrl.

Si ha configurado loginPage, después de configurar el loginPage, método updateAuthenticationDefaults seguirá llamándose en este momento si no hay ninguna configuración loginProcessingUrl, utilizar la nueva configuración que loginPage loginProcessingUrl.

Bueno, veo aquí, creo que los socios pequeños para entender la interfaz y está registrado como la dirección de la página de inicio de sesión por qué el principio.

2. Parámetros de inicio de sesión

A continuación, la interfaz de inicio de sesión, que a continuación para los parámetros de inicio de sesión.

En el último artículo , tenemos unos parámetros de formulario de inicio de sesión son usuario y contraseña, nota que, por defecto, esto no puede ser cambiado:

<form action="/login.html" method="post">
    <input type="text" name="username" id="name">
    <input type="password" name="password" id="pass">
    <button type="submit">
      <span>登录</span>
    </button>
</form>

¿Por qué es así?

O el retorno a la clase FormLoginConfigurer, en su constructor, podemos ver que hay dos maneras de configurar un nombre de usuario y contraseña:

public FormLoginConfigurer() {
	super(new UsernamePasswordAuthenticationFilter(), null);
	usernameParameter("username");
	passwordParameter("password");
}

Aquí, la configuración de primera clase súper llamada matriz, pasando la instancia UsernamePasswordAuthenticationFilter, que se asigna a las propiedades AuthFilter de la clase padre.

Siguiente usernameParameter sigue:

public FormLoginConfigurer<H> usernameParameter(String usernameParameter) {
	getAuthenticationFilter().setUsernameParameter(usernameParameter);
	return this;
}

getAuthenticationFilter en realidad un método de la clase padre para devolver la propiedad AuthFilter En este método, que es UsernamePasswordAuthenticationFilter ejemplo de un entorno de inicio, a continuación, llamar al método de instancia setUsernameParameter para establecer el nombre de inicio de sesión de los parámetros de usuario:

public void setUsernameParameter(String usernameParameter) {
	this.usernameParameter = usernameParameter;
}

Ajuste aquí ¿para qué sirve? Cuando la solicitud de inicio de sesión desde el navegador al servidor, HttpServletRequest solicitar Queremos saca del nombre de usuario de inicio de sesión del usuario y la contraseña de inicio de sesión, la forma de tomarlo? UsernamePasswordAuthenticationFilter o en la clase, los siguientes dos métodos:

protected String obtainPassword(HttpServletRequest request) {
	return request.getParameter(passwordParameter);
}
protected String obtainUsername(HttpServletRequest request) {
	return request.getParameter(usernameParameter);
}

Se puede ver, en esta ocasión, se utiliza el nombre de usuario y la contraseña de la configuración por defecto.

Por supuesto, estos dos parámetros que se pueden configurar sus propios parámetros establecidos de la siguiente manera:

.and()
.formLogin()
.loginPage("/login.html")
.loginProcessingUrl("/doLogin")
.usernameParameter("name")
.passwordParameter("passwd")
.permitAll()
.and()

Una vez configurado, debe modificar la primera página:

<form action="/doLogin" method="post">
    <div class="input">
        <label for="name">用户名</label>
        <input type="text" name="name" id="name">
        <span class="spin"></span>
    </div>
    <div class="input">
        <label for="pass">密码</label>
        <input type="password" name="passwd" id="pass">
        <span class="spin"></span>
    </div>
    <div class="button login">
        <button type="submit">
            <span>登录</span>
            <i class="fa fa-check"></i>
        </button>
    </div>
</form>

Tenga en cuenta que modificar el valor de nombre de atributo correspondiente de la entrada y el servidor.

Después de la configuración, reinicie la prueba de log.

3. Registro de devolución de llamada

Después de la conexión se realiza correctamente, tenemos que hacer frente a la situación de los puntos, en términos generales, nada más que dos situaciones:

  • Antes y después del final de la separación de sesión
  • extremos delantero y trasero, sin tener en cuenta Iniciar sesión

Gestión de dos casos no son los mismos. En este trabajo primera señal en los extremos posteriores de la segunda tarjeta frontal y, con independencia de la parte delantera y la parte trasera de la devolución de llamada de inicio de sesión separación vuelvo y de entrar en detalles en el próximo artículo.

3.1 Inicio de sesión éxito de devolución de llamada

En la primavera de Seguridad, una URL de inicio de sesión de redirección éxito y métodos relacionados son dos:

  • defaultSuccessUrl
  • successForwardUrl

Tanto primera vista no es diferente, de hecho, universo construido.

En primer lugar, en el momento de la configuración, defaultSuccessUrl y successForwardUrl podemos sólo es necesario configurar una configuración específica que depende de sus necesidades, existen dos diferencias son las siguientes:

  1. defaultSuccessUrl tener un método sobrecargado, digamos defaultSuccessUrl un parámetro de método. Si se especifica un inicio de sesión en defaultSuccessUrl salto exitoso a la página /index, a continuación dos casos, si se introducen directamente en el navegador de inicio de sesión dirección, después de una conexión exitosa, se salta directamente a /index, si usted está en el explorador introduce una dirección diferente, por ejemplo http://localhost:8080/hello, debido a que los resultados no se registran en, y redirige a la página de inicio de sesión, después de que el inicio de sesión tiene éxito esta vez, no van a venir /index, pero llegó a /hellola página.
  2. También hay un método consistente defaultSuccessUrl sobrecargado, el segundo parámetro si no se establece el valor predeterminado es falso, es decir, que todo lo anterior, si se establece manualmente el segundo parámetro es cierto, los efectos defaultSuccessUrl y successForwardUrl.
  3. successForwardUrl indicar si vienes, después de todo acceso al sitio Ir a successForwardUrl especifica dirección. Por ejemplo successForwardUrl especifica la dirección /index, se introduce en la barra de direcciones del navegador http://localhost:8080/hello, ya que los resultados no se ha identificado, redirección a la página de inicio de sesión cuando se conecte con éxito, el servidor saltará a la /indexpágina, o directamente en la entrada del navegador iniciar sesión dirección de la página, también se produjo después de una conexión exitosa /index.

La configuración es la siguiente:

.and()
.formLogin()
.loginPage("/login.html")
.loginProcessingUrl("/doLogin")
.usernameParameter("name")
.passwordParameter("passwd")
.defaultSuccessUrl("/index")
.successForwardUrl("/index")
.permitAll()
.and()

Nota: En la práctica, defaultSuccessUrl y successForwardUrl sólo necesita uno puede ser.

3.2 La conexión falló devolución de llamada

Al igual que en el inicio de sesión con éxito, el fracaso de inicio de sesión también cuenta con dos métodos:

  • failureForwardUrl
  • failureUrl

Estos dos métodos de ajustar el tiempo también puede establecer una . fallos de conexión failureForwardUrl se producen después de que el lado del servidor salta, failureUrl a continuación, después del inicio de sesión falla, se produce la redirección.

4. Cierre de sesión

Salir de la interfaz es el valor por defecto /logout, también se puede configurar.

.and()
.logout()
.logoutUrl("/logout")
.logoutRequestMatcher(new AntPathRequestMatcher("/logout","POST"))
.logoutSuccessUrl("/index")
.deleteCookies()
.clearAuthentication(true)
.invalidateHttpSession(true)
.permitAll()
.and()

Salir configurado para conectarse conmigo acerca de:

  1. Salir URL es el valor por defecto /logout, es una petición GET, podemos modificar la URL de cierre de sesión por defecto por el método logoutUrl.
  2. logoutRequestMatcher método no sólo puede modificar el URL de cierre de sesión, también puede modificar el modo de solicitud, el proyecto real, y este método puede ser un logoutUrl fijado arbitrariamente.
  3. logoutSuccessUrl amortizaciones representan un salto con éxito a la página.
  4. deleteCookies para borrar la cookie.
  5. clearAuthentication y invalidateHttpSession representan información de autenticación clara y el fracaso HttpSession, no se puede configurar un valor predeterminado, el valor predeterminado se borra.

Pues bien, hoy que quiere decir, esto dejó a algunos de la parte delantera y la parte trasera de la separación de la interacción, Song Ge de nuevo y entrar en detalles en el próximo artículo.

Si se siente logro, recuerde que toque en la esquina inferior derecha Kane

Publicados 571 artículos originales · ganado elogios 6801 · Vistas 4.7 millones +

Supongo que te gusta

Origin blog.csdn.net/u012702547/article/details/105202015
Recomendado
Clasificación