Ich entwickle eine Anwendung mit Extjs-6 mit Spring 4. Meine Anwendung ist Ruhe.
aktiviere ich CORS Herkunft wie folgt:Wie meldet man sich bei der Federsicherung mit Ext.Ajax an?
public class CorsFilter extends OncePerRequestFilter {
private static final String ORIGIN = "Origin";
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
response.addHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Credentials", "true");
response.addHeader("Access-Control-Max-Age", "10");
String reqHead = request.getHeader("Access-Control-Request-Headers");
if (!StringUtils.isEmpty(reqHead)) {
response.addHeader("Access-Control-Allow-Headers", reqHead);
}
if (request.getMethod().equals("OPTIONS")) {
try {
response.getWriter().print("OK");
response.getWriter().flush();
} catch (IOException e) {
e.printStackTrace();
}
} else{
filterChain.doFilter(request, response);
}
}
}
Filter config:
<security:http use-expressions="true">
...
<sec:custom-filter ref="CorsFilter" before="HEADERS_FILTER"/>
</security:http>
und die Bohne:
<bean id="CorsFilter" class="..." />
Ich möchte Benutzer loging mit einer AJAX-Anfrage. Ich teste Ajax Anfrage mit Advanced REST client und . Die Ergebnisse der Erweiterungen sind wie folgt:
Ext Ajax-Request-Code ist wie folgt:
Ext.Ajax.request({
url: "http://localhost/Calk/j_spring_security_check",
// params: {
// "j_username": "ali",
// "j_password": "123456"
// },
params: "j_username=ali&j_password=123456",
headers: {
"Content-Type": "application/x-www-form-urlencoded"
},
method: "POST",
success: function(){...},
failure: function(){...}
});
Als ich die Anfrage senden, es 200 OK
bekommen, und ich init die Anwendung auf der Client-Seite, und senden Sie einige Anfragen, um einige Daten zu erhalten. Aber Server für alle Anfragen erhalten 401 Unauthorized
.
Was ist das Problem?
Wichtiges Update:
logining Anfrage ist wie folgt:
Server gesetzt Cookie als Antwort und autorisierte Datenanforderung erhalten ist wie folgt:
Warum?
Haben Sie versucht mit 'params: form.getValues ()'? – qmateub
ja, das Ergebnis ist wie oben. –
Das Problem ist, dass die Request-Methode "OPTIONS" verwendet wird, die immer ohne die Parameter gesendet wird, die Sie für die Authentifizierung benötigen. [Überprüfen Sie hier, warum diese Methode verwendet wird] (https://www.sencha.com/forum/showthread.php?95656-how-to-disable-Ajax.request-method-quot-OPTIONS-quot&p=452480&viewfull=1# post452480). – Alexander