작성
·
264
0
안녕하세요 3) 인증 처리자 - AjaxAuthenticationProvider 수업에서
ajax 요청 날린 뒤 응답이 <Response Body is Empty>가 안뜨고, HTML 파일(정상적인 home 화면)이 응답되는 현상이 있습니다.
https://github.com/kickhen/springsecuritypractice/tree/master
왜 저는 html이 리턴되는건지 무엇을 빼먹었는지 궁금합니다.
알려주시면 감사하겠습니다.
답변 2
0
네
일단 인증은 성공하고 있는데 응답을 반환하는 성공핸들러에 코드가 작성되어 있지 않습니다.
그리고 성공핸들러를 등록하지 않은 상태입니다.
@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);
}
와 같은 비동기 응답이 추가 되어야 합니다.
아직 강의를 듣는 중이신지 잘 모르겠지만 비동기 인증과 응답관련된 내용을 이해하시는게 중요합니다.
0
안녕하세요, 인프런 AI 인턴이에요.
ajax 요청을 보낸 뒤에 응답으로 HTML 파일이 돌아오는 현상은 일반적으로 요청한 URL에 대한 처리가 정상적으로 이루어지지 않아 발생할 수 있어요. 이러한 현상이 발생하는 이유는 다양하지만, 아래와 같은 가능성을 고려해 볼 수 있을 것 같아요.
요청을 처리하는 URL이 올바르게 설정되지 않았을 가능성이 있습니다. 요청을 보낸 URL이 예상한 URL과 다를 수도 있으니 확인해 보세요.
서버 측 코드에서 요청에 대한 처리 로직이 정상적으로 작성되지 않았을 수 있습니다. 서버 측에서는 요청에 대한 응답으로 HTML을 돌려주는 대신 다른 처리를 하고 있을 수 있으니 코드를 다시 확인해 보세요.
요청을 처리하는 컨트롤러에서 응답을 HTML로 설정하도록 설정되었을 수 있습니다. @ResponseBody와 같은 어노테이션을 사용하여 응답을 JSON 형식으로 설정되도록 확인해 보세요.
위의 사항을 확인해 보시고 문제가 해결되지 않는다면, 소스 코드를 자세히 살펴봐야 할 것 같습니다. 소스 코드를 보다 자세히 확인할 수 있는 링크를 공유해 주셨는데요, 해당 링크의 코드를 분석하여 어떤 부분에서 문제가 발생하고 있는지 확인해 보시면 좋을 것 같아요.
빠른 해결을 기원합니다. 좋은 하루 보내세요!
답변 감사합니다.
3) 인증 처리자 - AjaxAuthenticationProvider 수업에서는 강사님께서 AjaxAuthenticationSuccessHandler를 알려주시기 전이었고 핸들러 등록하지 않은 그 상태에서 응답은 <Response Body is Empty> 가 발생하는 것으로 수업에서 보여주셨습니다. (17분 30초 즈음부터 보여주시면서 form인증이 아닌 ajax 인증이라서 그렇다고 말씀하셨습니다.)
그런데 저는 empty response가 아니라 html이 리턴되고 있어서 이 부분에 대한 질문을 드린 것이었습니다.
한 번 더 확인해주시면 감사하겠습니다.
(AjaxAuthenticationSuccessHandler 추가 후에는 핸들러에서 작성한 대로 Account 객체가 Json으로 리턴되는 것 잘 확인 했습니다.)