Web Programming/Java Spring

자바 스프링 게시판 - 게시글 저장하기

jinmc 2021. 3. 2. 11:33
반응형

Home에서 글쓰는 페이지를 갈 수 있는 버튼을 만든 후, 페이지를 만듭니다.

 

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="https://www.thymeleaf.org"
      xmlns:sec="https://www.thymeleaf.org/thymeleaf-extras-springsecurity3">
<head>
</head>

<body class="bg-gradient-primary">

    <div class="container">
        <div class="container-fluid">
            <form th:action="@{/savePost}" method="post">
			    <div class="form-group"><label for="">제목 </label><textarea class="form-control form-control-solid" type="text" name="title" rows="1"></textarea></div>
				<div class="form-group"><label for="">내용 </label><textarea class="form-control form-control-solid" type="text" name="content" rows="20"></textarea></div>
				<input class="btn btn-primary" type="submit" value="저장 ">
			</form>
        </div>
    </div>

</body>

</html>

 

일단 PostController를 만듭니다. 물론 그 전에 post 모델을 만들어야겠죠.

 

# import 생략

@Entity
@Table(name = "post")
public class Post {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String userName;
    private String title;
    private String content;
    private int count;

	
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public String getContent() {
		return content;
	}
	public void setContent(String content) {
		this.content = content;
	}
	public int getCount() {
		return count;
	}
	public void setCount(int count) {
		this.count = count;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
    

    	
}

간단하기 위해 id, title, content, count, username정도만 추가했습니다.

html form에서 글의 제목, 내용, count는 0이나 1로 설정하면 되겠지만 문제는 username입니다.

로그인 되어있는 유저의 유저 아이디를 어떻게 가져올 수 있을까요?

#import 생략

@Controller
public class PostController {
	
	@Autowired
	private PostRepository postRepository;
	
	@RequestMapping("editform")
	String editForm() {
		return "editform";
	}
	
	
	
	@PostMapping("savePost")
	String savePost(Post post) {
		Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal(); 
		MyUserDetails userDetails = (MyUserDetails) principal; 
		String username = userDetails.getUsername();
		
		System.out.println(username);
		post.setCount(0);
		post.setUserName(username);
		postRepository.save(post);
		
//		출처: https://itstory.tk/entry/Spring-Security-현재-로그인한-사용자-정보-가져오기 [덕's IT Story]
//		CustomUser customUser = (CustomUser)authentication.getPrincipal();
//		int userId = customUser.getUserId();
		return "redirect:/home";
	}

}
반응형