He estado utilizando Spring Security 3.0 para nuestro mecanismo de inicio de sesión de sitio web mediante una página web de inicio de sesión dedicada. Ahora necesito que esa página web de inicio de sesión sea en cambio una ventana de ventana/ventana emergente en cada página web de nuestro sitio, donde al iniciar sesión recibo un resultado de AJAX, ya sea que haya tenido éxito o no. ¿Cuál es la mejor manera de hacerlo con Spring Security y Spring webmvc 3.0?inicio de sesión ajax con spring webMVC y seguridad de primavera
16
A
Respuesta
13
En el lado del cliente, puede simular un envío de formulario normal a su url de inicio de sesión a través de ajax. Por ejemplo, en jQuery:
$.ajax({
url: "${pageContext.request.contextPath}/j_spring_security_check",
type: "POST",
data: $("#loginFormName").serialize(),
beforeSend: function (xhr) {
xhr.setRequestHeader("X-Ajax-call", "true");
},
success: function(result) {
if (result == "ok") {
...
} else if (result == "error") {
...
}
}
});
En el lado del servidor, es posible personalizar AuthenticationSuccessHandler
AuthenticationFailureHandler
y para devolver un valor en lugar de redirección. Debido a que es probable que tenga una página de inicio de sesión normal, así (por intento de acceder a una página segura a través de URL directa), debe informar a las llamadas ajax de llamadas normales, por ejemplo, el uso de cabecera:
public class AjaxAuthenticationSuccessHandler implements AuthenticationSuccessHandler {
private AuthenticationSuccessHandler defaultHandler;
public AjaxAuthenticationSuccessHandler() {
}
public AjaxAuthenticationSuccessHandler(AuthenticationSuccessHandler defaultHandler) {
this.defaultHandler = defaultHandler;
}
public void onAuthenticationSuccess(HttpServletRequest request,
HttpServletResponse response, Authentication auth)
throws IOException, ServletException {
if ("true".equals(request.getHeader("X-Ajax-call"))) {
response.getWriter().print("ok");
response.getWriter().flush();
} else {
defaultHandler.onAuthenticationSuccess(request, response, auth);
}
}
}
7
hice algo similar (axtavt gracias):
public class AjaxAuthenticationSuccessHandler extends
SimpleUrlAuthenticationSuccessHandler {
public void onAuthenticationSuccess(HttpServletRequest request,
HttpServletResponse response, Authentication auth)
throws IOException, ServletException {
if ("XMLHttpRequest".equals(request.getHeader("X-Requested-With"))) {
response.getWriter().print(
"{success:true, targetUrl : \'"
+ this.getTargetUrlParameter() + "\'}");
response.getWriter().flush();
} else {
super.onAuthenticationSuccess(request, response, auth);
}
}}
me eligió para extender la sencilla manejador éxito para el comportamiento predeterminado de las peticiones no Ajax. Aquí está el XML para hacerlo funcionar:
<http auto-config="false" use-expressions="true" entry-point-ref="authenticationProcessingFilterEntryPoint">
<custom-filter position="FORM_LOGIN_FILTER" ref="authenticationFilter" />
...
...
</http>
<beans:bean id="authenticationProcessingFilterEntryPoint"
class="org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint">
<beans:property name="loginFormUrl" value="/index.do" />
<beans:property name="forceHttps" value="false" />
</beans:bean>
<beans:bean id="authenticationFilter" class=
"org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter">
<beans:property name="authenticationManager" ref="authenticationManager"/>
<beans:property name="filterProcessesUrl" value="/j_spring_security_check"/>
<beans:property name="sessionAuthenticationStrategy" ref="sas" />
<beans:property name="authenticationFailureHandler" ref="failureHandler"/>
<beans:property name="authenticationSuccessHandler" ref="successHandler"/>
</beans:bean>
<beans:bean id="successHandler" class="foo.AjaxAuthenticationSuccessHandler">
<beans:property name="defaultTargetUrl" value="/login.html"/>
</beans:bean>
<beans:bean id="failureHandler" class="foo.AjaxAuthenticationFailureHandler" />
Cuestiones relacionadas
- 1. Cookies de inicio de sesión/sesión, Ajax y seguridad
- 2. Inicio de sesión automático con seguridad de primavera
- 3. Symfony2 Inicio de sesión y seguridad
- 4. tiempo de espera de la sesión de seguridad de primavera
- 5. Spring Security, Spring MVC y Sesiones de inicio de sesión
- 6. ¿Cómo puedo hacer un inicio de sesión único con seguridad de primavera en dos dominios?
- 7. ¿Puedo tener múltiples contextos de seguridad con seguridad de primavera?
- 8. ¿Es posible invalidar una sesión de seguridad de primavera?
- 9. Seguridad de primavera y proxy AJP
- 10. Cómo redirigir el mensaje de control de la sesión simultánea de seguridad Spring en la pantalla de inicio de sesión?
- 11. Seguridad de primavera: no se puede cerrar sesión
- 12. Primavera Seguridad y autenticación LDAP
- 13. Inicio de sesión único en Spring Application
- 14. Seguridad de primavera: ¿cómo restablezco SPRING_SECURITY_LAST_EXCEPTION.message?
- 15. Servicios de RememberMe de seguridad de primavera con la cookie de sesión
- 16. primavera: Anotación equivalente de seguridad: autenticación de administrador y la seguridad:-método de seguridad global
- 17. ¿Cómo puedo obtener el nombre de usuario de un inicio de sesión fallido utilizando la seguridad de primavera?
- 18. SecurityContextHolder de seguridad de primavera: ¿sesión o solicitud vinculada?
- 19. ¿Cómo habilita LocaleInterceptor para cambiar la configuración regional en la página de inicio de sesión de seguridad de primavera?
- 20. Javascript hashing en llamadas de inicio de sesión AJAX, más seguridad?
- 21. tiempo de espera Salir/Sesión de captura con la seguridad de primavera
- 22. ¿Cómo puedo evitar que la seguridad de primavera se anexe; jsessionid = XXX a los redireccionamientos de inicio de sesión?
- 23. seguridad de primavera (3.0.x) y suplantación de usuario
- 24. Seguridad de Windows Validación de inicio de sesión personalizado
- 25. Obtener url de solicitud original en Spring Security formulario-página de inicio de sesión
- 26. ¿Cómo puedo desactivar el inicio de sesión basado en formulario de primavera para puntos finales RESTful?
- 27. la seguridad de Primavera y sin forma de la conexión
- 28. ¿Puedo usar Spring Social con Spring Security?
- 29. Spring Security: Omitir formulario de inicio de sesión
- 30. Alternativas a la seguridad de primavera en Java (primavera)
no funcionó. el nombre de usuario y la contraseña son nulos por necesidad – gsagrawal