본문 바로가기

Backend/Spring | SpringBoot

[Spring Security] Redirect Page의 JSP불러오기

반응형

이전글 : [Spring Security] 인증 이후 핸들러 설정

 

[Spring Security] 인증 이후 핸들러 설정

인증 이후에는 크게 인증 성공 후, 인증 실패 후로 나눌 수 있다. 내가 하려고 하는 작업은 login후에 role에 따라서 일반 사용자(User)와 관리자(Admin) 각각의 main페이지로 이동하는 것이다. 인증까지

nwblog06.tistory.com

 

이전에 구현 한 이후에 ajax로 response를 받게 되면 JSP가 파싱되어 웹페이지에 나오지 않고 화면에서의 반응은 없지만 console.log로 확인해보면 JSP코드가 보여진다.

 

이것을 JSP화면으로 변경하는 작업을 수행하려고 한다.

 

JSP코드가 파싱되어서 동작해야하는데 그 부분이 안되는 것으로 파악했다.

 

따라서 이전에 작업했던 Handler부분을 수정했다.

...
@Override
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response,
Authentication authentication) throws IOException {

	if ("XMLHttpRequest".equals(request.getHeader("X-Requested-With"))) {
		response.setContentType("application/json;charset=UTF-8");
		response.setStatus(HttpServletResponse.SC_OK);

		Map<String, Object> responseData = new HashMap<>();
		String targetUrl = determineTargetUrl(authentication); // 사용자 역할에 따라 URL 결정
		responseData.put("redirectUrl", targetUrl); // 리디렉션할 URL을 JSON 응답에 포함

		new ObjectMapper().writeValue(response.getWriter(), responseData);
	} else {
		handle(request, response, authentication);
	}
	clearAuthenticationAttributes(request);
}
...

 

이렇게 하고 로그인관련 ajax에서는 redirectUrl을 이렇게 사용한다.

$.ajax({
	type: 'POST',
	url: '/ajax/loginProcess',
	cache: false,
	contentType: 'application/json',
	data: JSON.stringify(serializedValues),
	success: function (response) {
		if(response.redirectUrl) {
			window.location.href = response.redirectUrl;
		}else {
			console.log("Redirect URL is missing in the response");
		}
	}
});

 

이렇게 하면  Map으로 정의된 response에서 redirectUrl이 계정 권한에 따라서 변경되며 접속이 가능해진다.

반응형