문제

봄에 사용자 정의 인증이 있어야합니다. 사용자가 제공 한 사용자 이름과 비밀번호를 가져 와서 일부 값과 비교하고 인증해야 할 간단한 클래스 여야합니다.

우리는 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. 인증 제공자의 값을 하드 코드하고 싶지 않습니다. 내 자신의 클래스를 제공하는 또 다른 방법이 있습니까? 나는 몇 가지 튜토리얼을 시도했지만 헛된 일을하면서 모두 봄이 데이터베이스 나 다른 종류의 파일을 통해 비교 작업을 수행 할 수 있도록하는 것처럼 보입니다. 직접 할 수 없습니까?
도움이 되었습니까?

해결책

자신의 userDetailsService를 작성 해야하는 것처럼 들립니다. 이것은 userDetails와 함께 SecurityContext.getPrincipal ()을 채우는 스프링 보안 인터페이스입니다. 보안 필터 체인이 끝날 때이 객체가 채워지지 않은 경우 Spring은 인증 예외를 던질 수 있으며 사용자는 응용 프로그램의 다른 페이지/부분으로 다시 지시 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top