작성
·
200
·
수정됨
0
19강을 듣고 있는데 문제가 생겨서 질문 드립니다
@PostMapping("/sign-up")
public String signUpSubmit(
@ModelAttribute
@Valid
SignUpForm signUpForm,
Errors errors
if (errors.hasErrors()){
return "account/sign-up";
}
Account account = accountService.processNewAccount(signUpForm);
accountService.login(account);
// 권한 : Authorities=[ROLE_USER] 반환 성공
log.info("@@@ 권한"+ SecurityContextHolder.getContext().getAuthentication().toString());
return "redirect:/";
}
리다이렉트 직전에 로그를 만들어 권한을 찍어보니 Granted Authorities=[ROLE_USER]가 반환되는데, 리다이렉트를 한 곳에서는 로그에 권한을 찍어보니 [ROLE_ANONYMOUS]라고 나옵니다ㅠ..문제를 알 수 있을까요?
답변 2
1
좋은 질문이네요. "/" 이 URL에는 스프링 시큐리티가 권한 체크 하지 않고 모두에게 (익명 사용자) 허용하는 URL로 설정해 두었기 때문입니다. "/"로 접속했을 때에도 USER 권한인지 확인하고 싶다면 SecurityConfig에서 "/"를 뺴야 합니다.
.mvcMatchers("/", "/sign-up", "/check-email-token",
"/email-login", "/login-by-email", "/search/study").permitAll()
"/index"로 보내더라도 리다이렉트를 사용해서 가도록 "redirect:/index"를 사용하시는게 좋겠네요. POST 요청 처리 이후 뒤로가기 눌렀을 때 폼이 다시 보내지는 일을 방지하려면 redirect를 쓰는게 좋습니다.
0
커뮤니티를 보니까 저랑 같은 문제를 겪었던 분들이 많은거 같아서 일단 임시로 해결책 올려봅니다 "redirect:/"부분을 "/index"로 바꾸면 되는거 같아요
--------------------------------
redirect시 권한이 왜 초기화 되는지 알고 싶습니다. 알려주세요 인프런!!