Я пытаюсь сделать запись в этой стандартной пружинной URL, чтобы имитировать аутентификации:Simulate пост в Граалей - весна authetication
http://www.whateverAddress.is:8080/Test/j_spring_security_check
Если я использую плагин плакате он работает отлично, Я поставил два параметра j_username и j_password и параметр заголовка X-Requested-With = XMLHttpRequest, и я действительно получил результат json.
Если я попытаюсь сделать это с помощью кода на Java, множество примеров в Google, похоже, не сработает. На данный момент я использую этот код, но я ничего не получаю взамен:
HttpClient httpClient = new DefaultHttpClient();
List<NameValuePair> postParams = new ArrayList<NameValuePair>();
postParams.add(new BasicNameValuePair("j_username", "username"));
postParams.add(new BasicNameValuePair("j_password", "password"))
HttpPost httpPost = new HttpPost("http://www.whateverAddress.is:8080/Test/j_spring_security_check");
httpPost.setEntity(new UrlEncodedFormEntity(postParams, HTTP.UTF_8));
httpPost.addHeader("X-Requested-With", "XMLHttpRequest");
HttpResponse response = httpClient.execute(httpPost);
HttpEntity entity = response.getEntity();
String responseString = EntityUtils.toString(entity, "UTF-8");
System.out.println(responseString);
Если я печатаю ответ, (а не сущности) У меня есть следующие:
HTTP/1.1 302 Found [Сервер : Apache-Coyote/1.1, Set-Cookie: grails_remember_me = ""; Expires = Thu, 01-Jan-1970 00:00:10 GMT; Path =/Test, Set-Cookie: JSESSIONID = 247CF8B70D589F053DE4C937F2E16B9D; Path =/Test /; HttpOnly, Location: http://www.whateverAddress.is:8080/Test/login/authfail?ajax=true, Content-Length: 0, Date: Tue, 16 Sep 2014 12:04:12 GMT]
Какой код 302, так как я перенаправлен вместо кода 200 и json, так как Плакат плакат показывает мне.
UPDATE создать кнопку, которая запустим запрос Ajax пост, как я должен быть в состоянии сделать из стороны Java-кода, здесь код:
$(function() {
$('#btnPush').on('click', function() {
$.ajax({
url: 'http://www.whateverAddress.is:8080/Test/j_spring_security_check',
type: 'POST',
data: {
j_username: 'username',
j_password: 'password'
},
success: function(data, textStatus, jqXHR) {
alert('Success!!!');
},
error: function(jqXHR, textStatus, errorThrown) {
alert('Fail!');
}
});
});
});
Глядя на запрос, отправленный, я см. заголовок и полученный JSON, все в порядке. Если я повторяю один и тот же заголовок в java-стороне, ничего не происходит. Я что-то пропустил
ПОСЛЕДНЕГО ОБНОВЛЕНИЯ - ЗАКРЫТЬ В основном после того, как сообщение будет сделано, мы должны следовать за переадресацию с Идент куки, чтобы получить нужную информацию:
def headers = ["X-Requested-With": "XMLHttpRequest"]
def postParams = ["j_username": user, "j_password": pwd]
def url = "http://www.whatever.is:8080/test/j_spring_security_check"
def returnstring = doHttpPost(url, postParams, headers)
private String doHttpPost(String url, Map<String, String> params, Map<String, String> headers) {
HttpClient client = new DefaultHttpClient()
HttpPost post = new HttpPost(url)
String result
try {
List<NameValuePair> urlParameters = new ArrayList<NameValuePair>()
headers?.each {
post.setHeader(it.key, it.value)
}
params?.each {
urlParameters.add(new BasicNameValuePair(it.key, it.value))
}
if (params) {
post.setEntity(new UrlEncodedFormEntity(urlParameters))
}
HttpResponse response = client.execute(post)
if (response.getStatusLine()?.getStatusCode() == 200) {
result = response.getEntity().getContent()?.text
}
if (response.getStatusLine()?.getStatusCode() == 302) {
String redirectUrl = response.getHeaders("Location")?.value[0]
result = doHttpGet(redirectUrl, ["Cookie": response.getHeaders("Set-Cookie")?.value[0]])
}
} catch (Exception ex) {
log.error(ex)
} finally {
post.getEntity().consumeContent()
return result
}
}
Вы перешли на 'loginUrl' после попытки входа в систему. Security Servlet/Filter не похоже, что запрос был отправлен как AJAX. Попробуйте добавить больше заголовков, чтобы сервер распознал их правильно. – injecteer
Я пытаюсь реплицировать один и тот же заголовок, но не удачи – NiBE
вы используете 2 разных URL: «http: // localhost: 8080/SkiBook/j_spring_security_check» и «http://www.whateverAddress.is:8080/Test/j_spring_security_check» – injecteer