Мне нужна простая пользовательская аутентификация весной

StackOverflow https://stackoverflow.com/questions/1606513

  •  05-07-2019
  •  | 
  •  

Вопрос

Весной мне нужна специальная аутентификация, это должен быть простой класс, который принимает имя пользователя и пароль, предоставленные пользователем, сравнивает их с некоторыми значениями и на основе этого должен аутентифицироваться.

Мы используем систему, созданную в GWT, наша форма входа в случае успеха открывает другую страницу в новом окне.

Это то, что я пытался до сих пор:файл:Безопасность контекста приложения:

...
<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>
...

Пользовательский код входа (при нажатии кнопки «ОК»):

        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();

Проблемы:

  1. Неверный логин:он показывает успех и открывает всплывающее окно с экраном входа в систему !!(очевидно, вход в систему не удался, но экран входа в систему не смог это обнаружить)
  2. Я не хочу жестко кодировать значения в поставщике аутентификации, есть ли другой способ предоставить свой собственный класс?Я попробовал несколько руководств, но тщетно, все они, похоже, указывают на то, что я разрешаю Spring выполнять работу по сравнению через базу данных или какой-либо другой файл, могу ли я сделать это сам?
Это было полезно?

Решение

Мне кажется, вам нужно написать свой собственный UserDetailsService.Это интерфейс Spring Security, который заполняет SecurityContext.getPrincipal() данными UserDetails.Если к концу цепочки фильтров безопасности этот объект не был заполнен, Spring выдаст исключение авторизации, которое можно перехватить, и пользователь может быть перенаправлен на другую страницу/часть приложения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top