강의

멘토링

커뮤니티

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

조윤호님의 프로필 이미지
조윤호

작성한 질문수

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

서블릿 필터 - 인증 체크

궁금한점이 있습니다

작성

·

381

1

로그인 하지 않고 /item 요청시

1. LogFilter 필터

2. LoginCheckFilter 필터

순으로 실행되는데 로그인 필터에서

httpResponse.sendRedirect("/login?redirectURL=" + requestURI);

으로 redirect한 부분에서 이해가 되질 않습니다.

 

해당 URL : /login?redirectURL=requestURL 로 클라이언트에서 다시 재요청하는데 처음에는

@GetMapping("/login")
public String loginForm(@ModelAttribute("loginForm") LoginForm form) {
return "login/loginForm";
}

get 메서드로 매핑된 loginForm으로 컨트롤러가 호출되어 화면을 랜더링해주고 그다음에

 

@PostMapping("/login")
public String loginV4(@Valid @ModelAttribute LoginForm form, BindingResult bindingResult,
@RequestParam(defaultValue = "/") String redirectURL,
HttpServletRequest request) {

if (bindingResult.hasErrors()) {
return "login/loginForm";
}

Member loginMember = loginService.login(form.getLoginId(), form.getPassword());

if (loginMember == null) {
bindingResult.reject("loginFail", "아이디 또는 비밀번호가 맞지 않습니다.");
return "login/loginForm";
}

//로그인 성공 처리
//세션이 있으면 있는 세션 반환, 없으면 신규 세션을 생성
HttpSession session = request.getSession();
//세션에 로그인 회원 정보 보관
session.setAttribute(SessionConst.LOGIN_MEMBER, loginMember);

return "redirect:" + redirectURL;

}

POST 메서드로 매핑된 loginV4 메서드가 호출되는거 아닌가요?

그러면 처음 필터에서 redirect로 해당 URL 파라미터로 보낸 쿼리 파라미터인

redirectURL=requestURL을 POST 메서드(loginV4)에서 사용할 수 있게  쿼리 파라미터를 

유지 시켜줘야하는거 아닌가요?

 

get 메서드 loginForm에서 쿼리 파라미터로 받은 값은 loginForm.html에서 사용할 수 있지만

다시 post메서드인 loginV4에서 사용하기 위해 loginForm.html에서 쿼리 파라미터를 보내줘야하는거 아닌가요..? 

 

 

 

 

 

 

 

 

 

답변 1

0

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 조윤호님

get form을 보시면 다음 부분을 확인할 수 있습니다.

<form action="" method="post">

이렇게 form을 비워두고 전송하게 되면 GET의 URL을 그대로 POST로 전송하게 됩니다.

감사합니다.

조윤호님의 프로필 이미지
조윤호
질문자

안녕하세요 김영한님

언급해주신  get의 url을 그대로 post로 전송된다는 말씀은 쿼리파라미터도 포함된다는 말씀이신지 다시한번 답변해주시면 감사하겠습니다

 

 

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 조윤호님

코드로 한번 테스트해보시면 추가로 질문하신 부분을 바로 이해하실 수 있을거에요^^

감사합니다.

조윤호님의 프로필 이미지
조윤호

작성한 질문수

질문하기