인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

Inflearn Community Q&A

이성주's profile image
이성주

asked

Spring MVC Part 2 - Backend Web Development Utilization Technology

Spring Interceptor - Authentication Check

@requestParam 이 값을 받아오지를 못합니다.

Written on

·

525

1

안녕하세요.

프로젝트 진행 중 인터셉터를 사용해서 로그인을 구현하고 있는 도중에 질문을 드립니다.

String requestURI = request.getRequestURI();
HttpSession session = request.getSession();

log.info("인증 체크 인터셉터 실행 {}",requestURI);

if(session == null || session.getAttribute(SessionConst.LOGIN_MEMBER) == null){
log.info("미인증 사용자 요청");
response.sendRedirect("/login?redirectURL=" + requestURI);
return false;
}

현재 인터셉터는 강의 내용대로 sendRedirect 를 사용해서 로그인이 안된 상태에서 처음 접했던 페이지로 이동하게끔 해놨습니다.

@PostMapping("/login")
public String loginV3(@Valid LoginForm loginForm, BindingResult result,
HttpServletRequest request, @RequestParam(defaultValue = "/") String redirectURL){
if(result.hasErrors()){
return "login/loginForm";
}
Member loginMember = loginService.login(loginForm.getLoginId(), loginForm.getPassword());
if(loginMember==null){
result.reject("loginFail","아이디 또는 비밀번호가 맞지 않습니다.");
return "login/loginForm";
}
//로그인처리
HttpSession session = request.getSession();
session.setAttribute(SessionConst.LOGIN_MEMBER,loginMember);
return "redirect:" + redirectURL;
}

그리고 login 컨트롤러에도 그냥 똑같이 정의를 해 놓았는데 로그인을 수행하면 처음 접했던 곳으로 가는 것이 아니라 그냥 home으로 가버립니다. 그래서 디버깅을 통해 @RequestParam 의 redirect 값을 조회해 봐도 그냥 "/" 값만 들어오더라구요....

무엇이 문제인지 잘 모르겠습니다.

 

 

MVCspring

Answer 1

2

이성주님의 프로필 이미지
이성주
Questioner

[자문자답]

아 원인을 찾았습니다...

(수정후 loginForm.html)

<form action="/login" th:object="${loginForm}" method="post">
<div th:if="${#fields.hasGlobalErrors()}">
<p class="field-error" th:each="err : ${#fields.globalErrors()}"
th:text="${err}">전체 오류 메시지</p>
</div>
<div>
<label for="loginId">로그인 ID</label>
<input type="text" id="loginId" th:field="*{loginId}" class="form-control"
th:errorclass="field-error">
<div class="field-error" th:errors="*{loginId}" />
</div>
<div>
<label for="password">비밀번호</label>
<input type="password" id="password" th:field="*{password}"
class="form-control"
th:errorclass="field-error">
<div class="field-error" th:errors="*{password}" />
</div>
<hr class="my-4">
<div class="row">
<div class="col">
<button class="w-100 btn btn-primary btn-lg" type="submit">
로그인</button>
</div>
<div class="col">
<button class="w-100 btn btn-secondary btn-lg"
onclick="location.href='items.html'"
th:onclick="|location.href='@{/}'|"
type="button">취소</button>
</div>
</div>
</form>

제가 개인적으로 loginForm 의 action을 /login 으로 바꾸어주었었습니다.

이 부분이 문제였습니다. 

다시 action="~" th:action 으로 수정해주었더니 올바르게 값을 가져오는 것을 확인할 수 있었습니다.

+ 혹시 저 action 의 차이점이 무엇인지 알 수 있을까요??

yh님의 프로필 이미지
yh
Instructor

저도 정확히 어떤 문제인지 잘 모르겠네요. 혹시 아시는 분 있으면 답변 부탁드립니다.

이성주's profile image
이성주

asked

Ask a question