У меня есть требование, когда страница входа открывает главную страницу во всплывающем окне,
Вот как я обработал это при обычной аутентификации:
<http>
...
<form-login login-page="/Login.html" authentication-failure-url="/LoginHandler.jsp" always-use-default-target="false" default-target-url="/LoginHandler.jsp"/>
...
</http>
Страница входа создает ajax-вызов (внутренне с помощью GWT's Request Builder) и читает html-страницу ответа. так что, если LoginHandler.jsp содержит «success», вход в систему будет успешным,
или если LoginHandler.jsp содержит «fail», то вход в систему не удался.
В любом случае, Login.html знает об ошибке или неудаче аутентификации и открывает всплывающее окно, содержащее главный экран в случае успеха.
Теперь мне нужно, чтобы моя система поддерживала OpenID, если я хорошо понимаю, аутентификация с открытым идентификатором работает следующим образом, в случае успеха открывается URL-адрес успеха (в основном это LoginHandler.jsp в моем случае), однако , если это не удается .... Он открывает экран входа в систему Целевого сервера (например, экран входа в Google), как мне спроектировать мой код для работы в этом senario ??
это мой конфиг:
<openid-login authentication-failure-url="/LoginHandler.jsp" default-target-url="/LoginHandler.jsp" user-service-ref="openIdUserService"/>
вот как я вхожу, используя RequestBuilder:
// Encode values for sending as a post request.
String postData = "j_username=" + username
+ "&j_password=" + password
+ ((isRemembered) ? "&_spring_security_remember_me=on" : "");
String serverUrl = URL.encode("j_spring_security_check");
/*
* Authenticate the user using a request builder to send the request to the server.
* <p>on successful authentication, open main screen in a pop up
* */
try
{
RequestBuilder requestBuilder = new RequestBuilder(RequestBuilder.POST, URL.encode(serverUrl));
requestBuilder.setHeader("Content-Type", "application/x-www-form-urlencoded");
requestBuilder.sendRequest(postData, new RequestCallback()
{
public void onError(Request request, Throwable exception)
{
//Do nothing
}
public void onResponseReceived(Request request, Response response)
{
String responseText = response.getText();
int indexStart = responseText.indexOf(startMessageIndicator) + startMessageIndicator.length();
int indexEnd = responseText.indexOf(endMessageIndicator);
String text = responseText.substring(indexStart, indexEnd);
//Login was a success
if (text.contains(successMessageIndicator))
{
//Woophie !! code for success comes here.
}
else if (text.contains(errorMessageIndicator))
{
//Ooops ! get the error message encoded in the page
}
}
});
}
catch (RequestException e)
{
//Do nothing
}
Есть ли способ использовать такой же подход для аутентификации на основе открытого идентификатора?