해당 게시글은 점프 투 스프링부트 교재를 통한 개인 학습 용도이며 기초 세팅은 생략하였습니다. 자바 8, 스프링부트 2.7.7버전 입니다. Question 속성 추가 Question 엔티티에 author 속성을 추가하자. (... 생략 ...) import javax.persistence.ManyToOne; import com.example.board.user.SiteUser; (... 생략 ...) public class Question { (... 생략 ...) @ManyToOne private SiteUser author; } 여러개의 질문이 한 명의 사용자에게 작성될 수 있으므로 @ManyToOne 관계가 성립한다. Answer 속성 추가 Answer 엔티티에도 추가해주자. (... 생략 ...)..
문득 점프 투 스프링부트 교재를 공부하다 시큐리티는 인증과 권한을 담당한다는 문구를 보고 관리자같은 권한을 따로 부여하는 방법이 궁금해졌다. 해당 글은 스프링 시큐리티 - 점프 투 스프링부트(게시판 만들기) 편과 연계된다. 만들어 놓았던 SecurityConfig를 살펴보자. package com.example.board.practice; (... 생략 ...) @Configuration @EnableWebSecurity public class SecurityConfig { @Bean SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http.authorizeHttpRequests().requestMatchers( new AntP..
해당 게시글은 점프 투 스프링부트 교재를 통한 개인 학습 용도이며 기초 세팅은 생략하였습니다. 자바 8, 스프링부트 2.7.7버전 입니다. 로그인 구현하기 회원 가입 단계에서 SITE_USER 테이블에 회원 정보를 저장했다. SITE_USER 테이블에 저장된 사용자명(사용자 ID)과 비밀번호로 로그인을 하려면 복잡한 단계를 거쳐야 한다. 하지만 스프링 시큐리티를 사용하면 이 단계를 보다 쉽게 진행할 수 있다. 로그인 URL 등록 먼저 스프링 시큐리티에 로그인 URL을 등록하자. SecurityConfig.java package com.example.board.practice; (... 생략 ...) public class SecurityConfig { @Bean SecurityFilterChain fil..
해당 게시글은 점프 투 스프링부트 교재를 통한 개인 학습 용도이며 기초 세팅은 생략하였습니다. 자바 8, 스프링부트 2.7.7버전 입니다. 회원 정보를 위한 엔티티 회원 가입 시 회원 정보를 위한 엔티티에는 최소한 ID, PW, email이 필요하다고 가정하겠다. SiteUser 엔티티 사용자를 관리할 SiteUser 엔티티를 작성하자 파일경로 : /practice/src/main/java/com/example/board/user/SiteUser.java package com.example.board.user; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; im..
해당 게시글은 점프 투 스프링부트 교재를 통한 개인 학습 용도이며 기초 세팅은 생략하였습니다. 자바 8, 스프링부트 2.7.7버전 입니다. 답변 개수 표시하기 question_list.html 템플릿에 코드를 추가하자. (... 생략 ...) (... 생략 ...) th:if="${#lists.size(question.answerList) > 0}"로 답변이 있는지 조사하고 th:text="${#lists.size(question.answerList)}"로 답변 개수를 표시했다. #list.size(이터러블객체)는 이터러블 객체의 사이즈를 반환하는 타임리프의 유틸리티이다.
해당 게시글은 점프 투 스프링부트 교재를 통한 개인 학습 용도이며 기초 세팅은 생략하였습니다. 자바 8, 스프링부트 2.7.7버전 입니다. 게시물 번호 공식 만들기 만약 질문 게시물이 12개라면 0페이지에는 12번째~3번째 게시물이, 1페이지에는 2번째~1번째 게시물이 역순으로 표시되어야 한다. 질문 게시물의 번호를 역순으로 정렬하려면 다음과 같은 공식을 적용해야 한다. 번호 = 전체 게시물 개수 - (현재 페이지 * 페이지당 게시물 개수) - 나열 인덱스 항목 설명 번호 최종 표시될 게시물 번호 전체 게시물 개수 데이터베이스에 저장된 게시물 전체 개수 현재 페이지 페이징에서 현재 선택한 페이지 (만약 페이지가 1부터 시작한다면 1을 빼주어야 한다. 하지만 스프링부트의 페이징은 0부터 시작하므로 1을 뺄..
해당 게시글은 점프 투 스프링부트 교재를 통한 개인 학습 용도이며 기초 세팅은 생략하였습니다. 자바 8, 스프링부트 2.7.7버전 입니다. 내비게이션 바 메인페이지로 돌아갈 수 있는 기능을 구현한 내비게이션 바를 만들어보자. 내비게이션바는 모든 페이지에서 공통적으로 보여야 하므로 layout.html 템플릿에 추가해야 한다. 파일경로 : /practice/src/main/resources/templates/navbar.html 게시판 연습 로그인 항상 홈 페이지로 이동해 주는 로고를 가장 왼쪽에 배치했고, 오른쪽에는 '로그인' 링크를 추가했다 (추후 구현) layout.html을 수정하자. (... 생략 ...) navbar.html을 통해 내비게이션 바를 분리 한 뒤 th:replace를 사용하여 포함..
해당 게시글은 점프 투 스프링부트 교재를 통한 개인 학습 용도이며 기초 세팅은 생략하였습니다. 자바 8, 스프링부트 2.7.7버전 입니다. 오류 메시지 공통 템플릿 오류 메시지를 표시하는 공통 템플릿을 작성하자 파일 경로 : /practice/src/main/resources/templates/form_errors.html 출력할 오류 메세지 부분에 th:fragment="formErrorsFragment" 속성을 추가했다 필요한 템플릿에 적용하기 question_form.html 질문등록 제목 내용 타임리프의 th:replace 속성을 사용하면 공통 템플릿을 템플릿 내에 삽입할수 있다. div 엘리먼트를 form_errors.html 파일의 th:fragment 속성명이 formErrorsFragmen..