본문 바로가기
SpringBoot

Spring-Boot Blog Project 8. 메인페이지에 글 노출 구현하기

by 김마리님 2020. 7. 27.

이전 페이지 >>

 

Spring-Boot Blog Project 7. 글쓰기 구현하기

 

이제 홈페이지에 접속할때는 세션을 통해 인증이 없으면 로그인을 반드시 하도록 유도할 것이다.

 

옵션을 통해 /post나 /user 등의 주소를 가지고 있다면 세션 인터셉터를 거쳐 세션이 없다면 로그인을 유도할 것이다

세션 인터셉터에 대한 포스트

https://itstudy-mary.tistory.com/211

 

Spring-Boot Blog Project 5. 권한, 인증 체크하기

이전 게시물 여기 >> Spring-Boot Blog Project 4. 로그인 화면 구현하기 Spring-Boot Blog Project 4. 로그인 화면 구현하기 이전 글 Spring-Boot Blog Project 3. 회원가입 화면 구현하기 Spring-Boot Blog Proj..

itstudy-mary.tistory.com

 

/config/WebConfig.java

package com.mary.blog.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import com.mary.blog.config.aop.RoleIntercepter;
import com.mary.blog.config.aop.SessionIntercepter;

@Configuration
public class WebConfig implements WebMvcConfigurer{ // implements WebMvcConfigurer 하면 web.xml 파일됨
	
	@Override
	public void addInterceptors(InterceptorRegistry registry) {
		
		// 다른곳에서 사용 하지 않아서 굳이 IOC 할 필요 없음 
		
		registry.addInterceptor(new SessionIntercepter())
		.addPathPatterns("/user/**")
		.addPathPatterns("/post/**")
		.addPathPatterns("/post**");
		
		registry.addInterceptor(new RoleIntercepter()).addPathPatterns("/admin/**");
	}

}


 

그리고, /나 ""을 받는 indexcontroller을 post로 이동시키면,

 

/controller/IndexController.java

--중략--
	@GetMapping({"","/"})
	public String index() {
		return "redirect:/posts";
	}
--하략--

 

주소패턴에 걸리면 세션 인증을 거치게 된다.

 

이제 이 주소를 받으면 게시글 값을 모두 노출시키는 로직을 생성한다.

 

/controller/PostController.java

--중략--
		@GetMapping("/posts")
		public String getPosts(Model model){ //model 데이터 담고 이동할때 사용 (Requestdispatcher)
			model.addAttribute("posts", postService.목록보기());
			return "index";
		}
--하략--

 

모델은 데이터를 담아가는 일종의 바구니로, 마치 jsp의 RequestDispatcher처럼 데이터를 담고 이동해줄 것이다.

이제 정보를 이동시켜보자.

 

/service/PostService.java

--중략--
	
	@Transactional(readOnly = true)
	public List<Post> 목록보기() {
		 return postRepository.findAll();
	}
	
--하략--

 

/repository/PostRepository.java

package com.mary.blog.repository;

import java.util.List;

import com.mary.blog.controller.dto.PostDetailRespDto;
import com.mary.blog.model.Post;

public interface PostRepository {
	public void save(Post post);
	public List<Post> findAll();

}

 

이제 정보를 가지고 올 xml을 만든다.

 

post.xml

	<select id="findAll" resultType="com.mary.blog.model.Post">
		SELECT * FROM post ORDER BY id DESC
	</select>

 

마지막으로, 메인 홈페이지에 데이터를 출력한다.

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@include file="layout/header.jsp" %>

<div class="container">
      
  <table class="table table-striped">
    <thead>
      <tr>
        <th>번호</th>
        <th>제목</th>
        <th>작성일</th>
      </tr>
    </thead>
    <tbody>
    <c:forEach var="post" items="${posts}">
      <tr>
        <td>${post.id }</td>
        <td><a href="/post/${post.id}">${post.title }</a></td>
        <td><fmt:formatDate value="${post.createDate }" pattern="yyyy-mm-dd"/></td>
      </tr>
      </c:forEach>
      <tr>
    </tbody>
  </table>
</div>

<%@include file="layout/footer.jsp" %>

 

반응형