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

서병준님의 프로필 이미지

작성한 질문수

스프링과 JPA 기반 웹 애플리케이션 개발

회원 가입 메인 네비게이션 메뉴

회원가입 성공 후 redirect이동시 권한 질문

작성

·

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시 권한이 왜 초기화 되는지 알고 싶습니다. 알려주세요 인프런!!