0 votes

J'ai besoin d'une authentification simple et personnalisée dans Spring

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 :

  1. 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).
  2. 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 ?

1voto

Gandalf Points 4909

Il me semble que vous devez écrire votre propre UserDetailsService. Il s'agit de l'interface de Spring Security qui remplit le SecurityContext.getPrincipal() avec les UserDetails. Si, à la fin de la chaîne de filtrage de sécurité, cet objet n'a pas été rempli, Spring lancera une exception d'autorisation qui peut être attrapée et l'utilisateur peut être redirigé vers une autre page/partie de l'application.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X