J'ai besoin d'une authentification personnalisée dans Spring, il doit s'agir d'une classe simple qui prend le nom d'utilisateur et le mot de passe fournis par un utilisateur et les compare avec certaines valeurs et sur cette base, il doit s'authentifier.
Nous utilisons un système fait en GWT, notre formulaire de connexion, sur le succès, ouvre une autre page dans une nouvelle fenêtre.
Voici ce que j'ai tenté jusqu'à présent : file : application-context Security :
...
<http auto-config="true">
<intercept-url pattern='/*Login.html' access="IS_AUTHENTICATED_ANONYMOUSLY"/>
<intercept-url pattern='/**/*MainScreen.html' access="ROLE_ADMIN"/>
<form-login login-page="/Login.html"/><!-- This is the default login page -->
</http>
<authentication-provider>
<user-service>
<user name="test1" password="abc" authorities="ROLE_ADMIN" />
<user name="test2" password="test" authorities="ROLE_ADMIN" />
</user-service>
</authentication-provider>
...
Code de connexion personnalisé (en cliquant sur le bouton ok) :
RequestBuilder requestBuilder = new RequestBuilder(RequestBuilder.POST,"j_spring_security_check");
requestBuilder.setHeader("Content-Type", "application/x-www-form-urlencoded");
//-- sending the username and the password in designated fields.
//Hard coding values for testing reasons:
requestBuilder.setRequestData("j_username=test1" +
"&j_password=abc");
requestBuilder.setCallback(new RequestCallback() {
public void onError(Request request, Throwable exception)
{
Window.alert("ERROR !!!"+exception.getMessage());
}
public void onResponseReceived(Request request, Response response)
{
if (response.getStatusCode() != Response.SC_UNAUTHORIZED && response.getStatusCode() != Response.SC_OK)
{
onError(request, new RequestException(response.getStatusText() + ":\n" + response.getText()));
return;
}
if (response.getStatusCode() == Response.SC_UNAUTHORIZED)
{
//This code is never encountered !! :((
Window.alert("You have entered an incorrect username or password. Please try again.");
}
else
{
String height = 800+"";
String width = 600+"";
Window.alert("Authorisation succeeded, you may enter....");
Window.open("MainScreen.html", "Main screen!!", "height=" + height + ",width=" + width
+ ",scrollbars=yes,resizable=yes,titlebar=no,toolbar=no,status=yes,close=no,left=0,top=0");
}
}
});
requestBuilder.send();
Problèmes :
- Connexion incorrecte : le système affiche le succès et ouvre une fenêtre popup contenant l'écran de connexion ! (manifestement, la connexion n'a pas réussi mais l'écran de connexion n'a pas pu le détecter).
- Je ne veux pas coder en dur les valeurs dans le fournisseur d'authentification, y a-t-il un autre moyen tel que de fournir ma propre classe ? J'ai essayé plusieurs tutoriels mais en vain, tous semblent indiquer que je dois permettre à Spring de faire le travail de comparaison via une base de données ou un autre type de fichier, ne puis-je pas le faire moi-même ?