인프런 커뮤니티 질문&답변

taewoo_kim님의 프로필 이미지
taewoo_kim

작성한 질문수

스프링 시큐리티

ajax 요청 응답에 대한 문의

작성

·

264

0

안녕하세요 3) 인증 처리자 - AjaxAuthenticationProvider 수업에서

ajax 요청 날린 뒤 응답이 <Response Body is Empty>가 안뜨고, HTML 파일(정상적인 home 화면)이 응답되는 현상이 있습니다.

 

https://github.com/kickhen/springsecuritypractice/tree/master

 

왜 저는 html이 리턴되는건지 무엇을 빼먹었는지 궁금합니다.

 

알려주시면 감사하겠습니다.

답변 2

0

정수원님의 프로필 이미지
정수원
지식공유자

일단 인증은 성공하고 있는데 응답을 반환하는 성공핸들러에 코드가 작성되어 있지 않습니다.

그리고 성공핸들러를 등록하지 않은 상태입니다.

AjaxSecurityConfig.java 에서

@Bean
public AjaxLoginProcessingFilter ajaxLoginProcessingFilter() throws Exception {
    AjaxLoginProcessingFilter ajaxLoginProcessingFilter = new AjaxLoginProcessingFilter();
    ajaxLoginProcessingFilter.setAuthenticationManager(authenticationManagerBean());
    ajaxLoginProcessingFilter.setAuthenticationSuccessHandler(new AjaxAuthenticationSuccessHandler());
    return ajaxLoginProcessingFilter;
}

위 코드에서

ajaxLoginProcessingFilter.setAuthenticationSuccessHandler(new AjaxAuthenticationSuccessHandler());

가 추가 되어야 합니다.

그리고 AjaxAuthenticationSuccessHandler 에는

private final ObjectMapper mapper = new ObjectMapper();

    @Override
    public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response,
                                        Authentication authentication) throws IOException, ServletException {
        Account account = (Account) authentication.getPrincipal();

        response.setStatus(HttpStatus.OK.value());
        response.setContentType(MediaType.APPLICATION_JSON_VALUE);

//        HttpSession session = request.getSession();
//        session.setAttribute(HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY, SecurityContextHolder.getContext());

        mapper.writeValue(response.getWriter(), account);
    }

와 같은 비동기 응답이 추가 되어야 합니다.

아직 강의를 듣는 중이신지 잘 모르겠지만 비동기 인증과 응답관련된 내용을 이해하시는게 중요합니다.

taewoo_kim님의 프로필 이미지
taewoo_kim
질문자

답변 감사합니다.

3) 인증 처리자 - AjaxAuthenticationProvider 수업에서는 강사님께서 AjaxAuthenticationSuccessHandler를 알려주시기 전이었고 핸들러 등록하지 않은 그 상태에서 응답은 <Response Body is Empty> 가 발생하는 것으로 수업에서 보여주셨습니다. (17분 30초 즈음부터 보여주시면서 form인증이 아닌 ajax 인증이라서 그렇다고 말씀하셨습니다.)

 

그런데 저는 empty response가 아니라 html이 리턴되고 있어서 이 부분에 대한 질문을 드린 것이었습니다.

한 번 더 확인해주시면 감사하겠습니다.

 

(AjaxAuthenticationSuccessHandler 추가 후에는 핸들러에서 작성한 대로 Account 객체가 Json으로 리턴되는 것 잘 확인 했습니다.)

 

 

0

안녕하세요, 인프런 AI 인턴이에요.
ajax 요청을 보낸 뒤에 응답으로 HTML 파일이 돌아오는 현상은 일반적으로 요청한 URL에 대한 처리가 정상적으로 이루어지지 않아 발생할 수 있어요. 이러한 현상이 발생하는 이유는 다양하지만, 아래와 같은 가능성을 고려해 볼 수 있을 것 같아요.

  1. 요청을 처리하는 URL이 올바르게 설정되지 않았을 가능성이 있습니다. 요청을 보낸 URL이 예상한 URL과 다를 수도 있으니 확인해 보세요.

  2. 서버 측 코드에서 요청에 대한 처리 로직이 정상적으로 작성되지 않았을 수 있습니다. 서버 측에서는 요청에 대한 응답으로 HTML을 돌려주는 대신 다른 처리를 하고 있을 수 있으니 코드를 다시 확인해 보세요.

  3. 요청을 처리하는 컨트롤러에서 응답을 HTML로 설정하도록 설정되었을 수 있습니다. @ResponseBody와 같은 어노테이션을 사용하여 응답을 JSON 형식으로 설정되도록 확인해 보세요.

위의 사항을 확인해 보시고 문제가 해결되지 않는다면, 소스 코드를 자세히 살펴봐야 할 것 같습니다. 소스 코드를 보다 자세히 확인할 수 있는 링크를 공유해 주셨는데요, 해당 링크의 코드를 분석하여 어떤 부분에서 문제가 발생하고 있는지 확인해 보시면 좋을 것 같아요.

빠른 해결을 기원합니다. 좋은 하루 보내세요!

taewoo_kim님의 프로필 이미지
taewoo_kim

작성한 질문수

질문하기