Ho utilizzato Spring Security 3.0 per il meccanismo di accesso al nostro sito Web utilizzando una pagina di accesso dedicata. Ora ho bisogno che quella pagina di login sia invece una finestra lightbox/pop-up su ogni pagina web del nostro sito, dove al momento del login ottengo un risultato AJAX indipendentemente dal fatto che abbia avuto successo o meno. Qual è il modo migliore per farlo con Spring Security e Spring Webmvc 3.0?login ajax con molla webMVC e sicurezza a molla
16
A
risposta
13
Sul lato client è possibile simulare un normale invio di moduli al proprio URL di accesso tramite ajax. Per esempio, in 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") {
...
}
}
});
Sul lato server, è possibile personalizzare AuthenticationSuccessHandler
e AuthenticationFailureHandler
per restituire un valore invece di reindirizzamento. Perché probabilmente avete bisogno di una pagina di login normale così (per il tentativo di accedere a una pagina protetta tramite URL diretto), si dovrebbe dire chiamate ajax dalle chiamate normali, ad esempio, utilizzando intestazione:
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
ho fatto qualcosa di simile (grazie axtavt):
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);
}
}}
ho scelto di estendere il semplice gestore di successo per il comportamento di default sulle richieste non Ajax. Ecco l'XML per farlo funzionare:
<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" />
Problemi correlati
- 1. disabilitazione della sicurezza a molla nell'app di avvio a molla
- 2. Avvio a molla, esclusione di sicurezza a molla UserDetailsService
- 3. Principio di accesso di sicurezza a molla
- 4. Test di integrazione con sicurezza a molla
- 5. timeout sessione di sicurezza molla
- 6. Avvio a molla e sicurezza con pagina di login AngularJS personalizzata
- 7. Logout/Timeout sessione in cattura con sicurezza a molla
- 8. Grails sicurezza molla, filtri servlet e risposta
- 9. Autenticazione a due fattori con sicurezza a molla oauth2
- 10. Quale devo usare tra l'avvio a molla, il BOM a molla e l'I/O a molla?
- 11. semplice e comprensibile applicazione a molla per il login
- 12. combinazione di sicurezza a molla 3 con jersey api
- 13. Avvio a molla con Hazelcast e Tomcat
- 14. Molla: molla filtro di inizio eccezioneSecurityFilterChain
- 15. Avvio a molla, disabilitare la sicurezza per i test
- 16. Annotazione transazionale a molla
- 17. gestione errori di sicurezza molla con risposta JSON
- 18. Cambia il contesto di sicurezza per la chiamata al metodo con sicurezza a molla
- 19. Jersey con molla 3.0?
- 20. Carica più file usando ajax e molla mvc
- 21. Integrazione JSP a molla, jersey e visibile
- 22. Come posso ottenere dati dal controller a molla da ajax?
- 23. Domini multipli con mvc a molla
- 24. Test MVC a molla con MockMvc
- 25. Integrazione liquibase con avvio a molla
- 26. Websocket a molla con 404 non trovato
- 27. IntelliJ + Tomcat + caricato a molla
- 28. Avvio a molla + Websocket (SockJS)
- 29. Eccezioni in rabbitmq con avvio a molla
- 30. Avvio a molla con AngularJS html5Mode
non ho capito. nome utente e password stanno arrivando a null da requst – gsagrawal