봄에는 간단한 사용자 정의 인증이 필요합니다
-
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();
문제 :
- 잘못된 로그인 : 성공을 보여주고 로그인 화면이 포함 된 팝업을 엽니 다 !! (분명히 로그인은 성공하지 못했지만 로그인 화면이 감지 할 수 없었습니다)
- 인증 제공자의 값을 하드 코드하고 싶지 않습니다. 내 자신의 클래스를 제공하는 또 다른 방법이 있습니까? 나는 몇 가지 튜토리얼을 시도했지만 헛된 일을하면서 모두 봄이 데이터베이스 나 다른 종류의 파일을 통해 비교 작업을 수행 할 수 있도록하는 것처럼 보입니다. 직접 할 수 없습니까?
해결책
자신의 userDetailsService를 작성 해야하는 것처럼 들립니다. 이것은 userDetails와 함께 SecurityContext.getPrincipal ()을 채우는 스프링 보안 인터페이스입니다. 보안 필터 체인이 끝날 때이 객체가 채워지지 않은 경우 Spring은 인증 예외를 던질 수 있으며 사용자는 응용 프로그램의 다른 페이지/부분으로 다시 지시 할 수 있습니다.
제휴하지 않습니다 StackOverflow