게시글 작성에서 기존의 방식은 사용자가 글 제목, 작성자, 글 내용을 직접 입력해야했습니다. 그러나 로그인한 사용자의 이름을 게시글 작성자로 설정해두고 싶습니다. 이 처리를 위해서는 세션이 필요하다고 생각했고 관련 자료들을 찾게 되었습니다.
HttpSession 활용하기
이 게시글에서 얻게 된 내용입니다. View 쪽에서 세션값을 지정해주고 Controller에서 session.getAttribute로 가져오는 방식입니다.
이 방법도 그럴싸했으나 하나의 의문이 들었습니다. SecurityConfig에서 분명히 로그아웃을 하면 세션 초기화하도록 지정해둔 기억이 났습니다.
.invalidateHttpSession(true)
세션이란게 있기에 이걸 삭제하고 그런거 아닐까요? 여기서 스프링 시큐리티 측에서 세션을 따로 관리하고 있다고 추측을 했습니다.
세션 확인해보기
개발자 도구 -> Application -> Storage -> Cookie 에 들어가 "JSESSIONID" 키가 존재하는 것을 확인할 수 있었습니다.
세션 활용하기
Spring Security에서 로그인한 사용자의 정보를 가져오는 방법에 대해서 정리해보겠습니다.
SecurityContextHolder
저는 이미 로그아웃을 구현하면서 이걸 쓴 기억이 있습니다. 조금 더 디테일하게 들어가면 사용자의 이름을 얻을 수 있습니다.
Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
User user = (User)principal;
String username = principal.getUsername();
Principal & Authentication 객체 활용
제가 사용한 방법입니다. 컨트롤러단에서 매개변수로 받아서 사용하는 방식입니다. 사용자 이름을 받아와서 model.addAttribute를 통해 view단에 이름을 넘겨줬습니다.
@GetMapping("/board/post")
public String post(Model model,Authentication authentication) {
UserDetails userDetails = (UserDetails) authentication.getPrincipal();
model.addAttribute("author",userDetails.getUsername());
return "board/post.html";
}
@GetMapping("/")
public String username(Principal principal) {
System.out.println(principal.getName());
retutn "/";
}
//Principal 객체 활용하는 방법
게시글 작성 view 수정
<div class="form-group row">
<label for="author" class="col-sm-2 col-form-label"><strong>작성자</strong></label>
<div class="col-sm-10">
<p class="" th:text="${author}" id = "author"></p>
<input type="hidden" name="author" class="form-control" id="inputAuthor" th:value="${author}">
</div>
</div>
p 태그를 통해서 author 정보를 받아와서 display 해줍니다. 그러나 저는 form으로 전달된 정보들을 그대로 받아와서 데이터베이스로 저장하기 떄문에 작성자 정보를 넘겨주지 않으면 문제가 생기게 됩니다. 따라서 hidden 타입으로 author값을 넘겨주도록 수정했습니다.
참고
'web > spring&spring boot' 카테고리의 다른 글
[spring boot] 스프링 부트 게시판 글 삭제 구현하기 (0) | 2021.06.05 |
---|---|
[spring boot] 스프링 부트 게시판 수정하기 기능 추가 (0) | 2021.05.27 |
[spring boot] 스프링 부트 게시판 글 조회 구현하기 (0) | 2021.05.20 |
[spring boot] 스프링 부트 게시판 등록 구현하기(2) (0) | 2021.05.19 |
[spring/spring boot] 스프링 부트 회원가입 후 자동로그인 기능 구현하기 (0) | 2021.05.17 |