강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của tjqudwns07021209
tjqudwns07021209

câu hỏi đã được viết

Phát triển ứng dụng web dựa trên Spring và JPA

Menu điều hướng chính đăng ký

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

Viết

·

454

·

Đã chỉnh sửa

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]라고 나옵니다ㅠ..문제를 알 수 있을까요?

javaspringspring-bootjpathymeleaf

Câu trả lời 3

1

whiteship님의 프로필 이미지
whiteship
Người chia sẻ kiến thức

좋은 질문이네요. "/" 이 URL에는 스프링 시큐리티가 권한 체크 하지 않고 모두에게 (익명 사용자) 허용하는 URL로 설정해 두었기 때문입니다. "/"로 접속했을 때에도 USER 권한인지 확인하고 싶다면 SecurityConfig에서 "/"를 뺴야 합니다.

.mvcMatchers("/", "/sign-up", "/check-email-token", "/email-login", "/login-by-email", "/search/study").permitAll()

"/index"로 보내더라도 리다이렉트를 사용해서 가도록 "redirect:/index"를 사용하시는게 좋겠네요. POST 요청 처리 이후 뒤로가기 눌렀을 때 폼이 다시 보내지는 일을 방지하려면 redirect를 쓰는게 좋습니다.

0

리다이렉션 이후 세션이 초기화 됨에 따라 권한 설정도 초기화가 된거같아요 세션에 SecurityContext를 반영해 해결했어요

// 서비스단 login메서드

public void login(Account account) { UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken( new UserAccount(account), account.getPassword(), List.of(new SimpleGrantedAuthority("ROLE_USER"))); SecurityContextHolder.getContext().setAuthentication(token); // 세션에 SecurityContext 반영 HttpSession session = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()) .getRequest().getSession(); session.setAttribute(HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY, SecurityContextHolder.getContext()); }

0

tjqudwns07021209님의 프로필 이미지
tjqudwns07021209
Người đặt câu hỏi

커뮤니티를 보니까 저랑 같은 문제를 겪었던 분들이 많은거 같아서 일단 임시로 해결책 올려봅니다 "redirect:/"부분을 "/index"로 바꾸면 되는거 같아요
--------------------------------
redirect시 권한이 왜 초기화 되는지 알고 싶습니다. 알려주세요 인프런!!

Hình ảnh hồ sơ của tjqudwns07021209
tjqudwns07021209

câu hỏi đã được viết

Đặt câu hỏi