- ๊ธ ์์ ๊ธฐ๋ฅ ์ค ์์ฑ ๊ถํ์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ํฉ๋๋ค.
- ์์ ๊ณผ ์ญ์ ๋ฒํผ์ ๋ก๊ทธ์ธํ ์ฌ๋๊ณผ ์์ฑํ ์ฌ๋์ด ๊ฐ์ ๊ฒฝ์ฐ์๋ง ๋ ธ์ถํฉ๋๋ค.
- ์ง์ ์ฃผ์๋ฅผ ์ ๋ ฅํ๊ณ ์์ฒญํ ๊ฒฝ์ฐ๋ฅผ ๋๋นํด Interceptor๋ก ์ฒ๋ฆฌํด์ค๋๋ค.
BoardController
ํ์ฌ ๋ก๊ทธ์ธ ๋ ์ ์ ์ ์ ๋ณด๋ sessioUser์ ์ ์ฅ๋์ด์์ด์ ๋ถ๋ฌ์จ๋ค.

sessionUser์ ๋ชจ๋ธ๋ก ๋ณด๋ด์ค๋ค. readํ์ด์ง๋ก

๊ธฐ์กด์ ์๋ getBoardDetail ์์
writer_idx ์ถ๊ฐ
<select id="getBoardDetail" parameterType="Integer" resultType="com.demo.domain.ContentVO" >
SELECT board_idx,u.name, writer_idx,
DATE_FORMAT(regDate,'%y-%m-%d') AS regDate,
title,
content,
content_file
FROM board b
JOIN user u
ON b.writer_idx = u.user_idx
WHERE board_idx = #{board_idx}
</select>

read.jsp
์กฐ๊ฑด๋ฌธ์ผ๋ก ์ธ์ ์ ์์ด๋์ ๊ธ ์์ฑ์๊ฐ ๋์ผํ ๊ฒฝ์ฐ์๋ง ํด๋น ๋ฉ๋ด ๋ณด์ด๊ฒ ํจ

ํ ์คํธ
ํ์ฌ ๋ก๊ทธ์ธ ์ ์ ๋ ํ๊ธธ๋์
๊ทธ๋์ ๋ฌด์ง๊ฐ ์์ฑํ ๊ธ์ ๋ณด๋ฉด ๋ชฉ๋ก๋ณด๊ธฐ ๋ฒํผ๋ง ์ถ๋ ฅ

ํ๊ธธ๋์ ์์ ํ๊ธฐ, ์ญ์ ํ๊ธฐ ๋ณด์

๋ก๊ทธ์ธ ํ ๋ค๋ฅธ ์ ์ ๊ฐ ์ฃผ์์ฐฝ์ ํตํด ์ง์ ์ ๋ ฅํ๊ณ ์์ฒญ ํ ๊ฒฝ์ฐ๋ฅผ ๋๋นํด์ ์ธํฐ์ ํฐ๋ก ์ฒ๋ฆฌํด์ค๋ค.
CheckWriterInterceptor

package com.demo.interceptor;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.servlet.HandlerInterceptor;
import com.demo.domain.ContentVO;
import com.demo.domain.LoginUser;
import com.demo.service.BoardService;
import com.demo.service.MenuService;
public class CheckWriterInterceptor implements HandlerInterceptor{
@Resource(name = "sessionUser")
private LoginUser sessionUser;
@Autowired
private BoardService boardService;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
// ์ธํฐ์
ํฐ๋ ์์ฒญ์ ๋จผ์ ์คํ๋์ด ์์
์ ํ๊ณ ๋ง์ฝ ๋ฆฌํด์ด false๊ฐ ๋๋ฉด ์์ฒญ์ ์ทจ์ํ๋ค.
String str1 = request.getParameter("board_idx");
int board_idx = Integer.parseInt(str1); //str1์ int๋ก ๋ฐ๊ฟ์ค
ContentVO content = boardService.getContentDetail(board_idx);
if(sessionUser.getUser_idx() != content.getWriter_idx()) { //์ ์ ์ธ๋ฑ์ค ๋ฒํธ๋ ๊ธ์ด์ด ๋ฒํธ๋ ๋์ผ์ฌ๋ถ
request.setAttribute("sessionUser", sessionUser);
String contetxPath = request.getContextPath();
response.sendRedirect(contetxPath + "/board/not_writer");
return false; //์์ฒญํ ์ฃผ์๋ฅผ ์ทจ์
}
return true;
}
}
์ธํฐ์ ํฐ ๋ฑ๋ก ๋ฐ ์ค์
<!--์ธํฐ์
ํฐ ๊ฐ์ฒด ๋ฑ๋ก -->
<beans:bean id="MenuInterceptor"
class="com.demo.interceptor.MenuInterceptor">
<beans:constructor-arg>
<beans:bean class="com.demo.service.MenuService"></beans:bean>
</beans:constructor-arg>
</beans:bean>
<beans:bean id="CheckLoginInterceptor"
class="com.demo.interceptor.CheckLoginInterceptor" />
<beans:bean id="CheckWriterInterceptor"
class="com.demo.interceptor.CheckWriterInterceptor" />
<!--์ธํฐ์
ํฐ ์ค์ -->
<interceptors>
<interceptor>
<mapping path="/" />
<mapping path="/board/*" />
<mapping path="/user/*" />
<beans:ref bean="MenuInterceptor" />
</interceptor>
<interceptor>
<mapping path="/user/modify" />
<mapping path="/user/logout" />
<mapping path="/board/*" />
<exclude-mapping path="/board/main" />
<beans:ref bean="CheckLoginInterceptor" />
</interceptor>
<interceptor>
<mapping path="/board/modify" />
<mapping path="/board/delete" />
<beans:ref bean="CheckWriterInterceptor" />
</interceptor>
</interceptors>
BoardController
@GetMapping("/not_writer")
public String not_writer() {
return "board/not_writer";
}
not_writer.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var='root' value="${pageContext.request.contextPath }/"/>
<script>
alert('์๋ชป๋ ์ ๊ทผ์
๋๋ค')
location.href = '${root}/main'
</script>
BoardService
//์์ ์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์์ ์์ ๊ฒ์๊ธ ๊ฐ์ฒด์ ์
๋ ฅํ๋ค
public void getContents(BoardVO modifyContent) {
ContentVO temp = boardDAO.getContentDetail(modifyContent.getBoard_idx());
modifyContent.setName(temp.getName());
modifyContent.setTitle(temp.getTitle());
modifyContent.setRegDate(temp.getRegDate());
modifyContent.setContent(temp.getContent());
modifyContent.setContent_file(temp.getContent_file());
}
BoardController
@GetMapping("/modify")
public String modify(@RequestParam("info_idx") int info_idx,
@RequestParam("board_idx") int board_idx,Model model,
@ModelAttribute("modifyContent") BoardVO modifyContent) {
modifyContent.setInfo_idx(info_idx);
modifyContent.setBoard_idx(board_idx);
boardService.getContents(modifyContent); // ์์ ์ ์ ๋ณด๋ฅผ db์์ ๊ฐ์ ธ์จ๋ค
model.addAttribute("modifyContent", modifyContent); //์์ ํ์ด์ง๋ก ์ ๋ฌ
model.addAttribute("info_idx", info_idx); //๊ฒ์ํ๋ฒํธ ์ ๋ฌ
return "board/modify";
}
๋์ด์ค๋ board_idx๋ฅผ modifyContent์ ๋ฃ์
modify.jsp

์ด๋ฏธ์ง ์์ ํ ๋ ๊ผญ ์์ฑํด์ผํจ
<form:form action='${root}/board/modify_pro'
modelAttribute="modifyContent" enctype="multipart/form-data">
<form:hidden path="board_idx" />
<form:hidden path="info_idx" />
<div class="form-group">
<form:label path="name">์์ฑ์</form:label>
<form:input path="name" class='form-control'
readonly="true" />
</div>
<div class="form-group">
<form:label path="regDate">์์ฑ๋ ์ง</form:label>
<form:input path="regDate" class='form-control'
readonly='true' />
</div>
<div class="form-group">
<form:label path="title">์ ๋ชฉ</form:label>
<form:input path="title" class='form-control' />
<form:errors path="title" style='color:red' />
</div>
<div class="form-group">
<form:label path="content">๋ด์ฉ</form:label>
<form:textarea path="content" class="form-control"
rows="10" style="resize:none" />
<form:errors path="content" style='color:red' />
</div>
<div class="form-group">
<label for="board_file">์ฒจ๋ถ ์ด๋ฏธ์ง</label>
<!-- ๋ง์ฝ ์ด๋ฏธ์ง๊ฐ ์์ ๊ฒฝ์ฐ ํ์ํ๊ณ , ์ด๋ฏธ์ง๋ฅผ ์๋ก ์ฒจ๋ถํ์ง ์์ ๊ฒฝ์ฐ์ hidden์ด ๋ค์ ์ ๋ฌ๋จ -->
<c:if test="${modifyContent.content_file != null }">
<img src="${root }/upload/${modifyContent.content_file}"
width="100%" />
<form:hidden path="content_file" />
</c:if>
<form:input path="upload_file" type='file' class="form-control"
accept="image/*" />
</div>
<div class="form-group">
<div class="text-right">
<form:button class='btn btn-primary'>์์ ์๋ฃ</form:button>
<a
href="${root }/board/read?info_idx=${modifyContent.info_idx}&board_idx=${modifyContent.board_idx}"
class="btn btn-info">์ทจ์</a>
</div>
</div>
</form:form>
BoardVO ์์ ( ๊ฒํฐ ์ธํฐ ์ถ๊ฐ) ๊ธ์ด์ด ์ด๋ฆ
private int board_idx; //๊ธ๋ฒํธ
private String name; //์์ฑ์
@NotBlank(message = "์ ๋ชฉ์ ์
๋ ฅํด์ฃผ์ธ์")
private String title; //์ ๋ชฉ
@NotBlank(message = "๋ด์ฉ์ ์
๋ ฅํด์ฃผ์ธ์")
private String content; //๊ธ๋ด์ฉ
private String content_file; //์ด๋ฏธ์ง ํ์ผ ์ด๋ฆ
private int writer_idx; //๊ธ์ด์ด
private int info_idx; //๊ฒ์ํ์ด๋ฆ
private String regDate; //์์ฑ๋ ์ง
private MultipartFile upload_file; //์
๋ก๋ ํ์ผ
ํ ์คํธํ๊ธฐ

์ทจ์ํ๊ธฐ ๋ฒํผ ๋๋ ์ ๊ฒฝ์ฐ

'BACKEND > Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ๊ฒ์ํ ๋ง๋ค๊ธฐ 2 - ๊ฒ์๊ธ ์์ ์ฒ๋ฆฌ (0) | 2023.11.02 |
|---|---|
| ๊ฒ์ํ ๋ง๋ค๊ธฐ 2 - ์ด๋ฏธ์ง ์ ๋ก๋ ๋ฐฉ๋ฒ ๋ณ๊ฒฝ (0) | 2023.11.02 |
| ๊ฒ์ํ ๋ง๋ค๊ธฐ 2 - ๊ธ ์์ฑ ํ ์์ฑํ๋ ๋ฉ๋ด๋ก ๋์๊ฐ๊ธฐ (0) | 2023.11.01 |
| ๊ฒ์ํ ๋ง๋ค๊ธฐ 2- ๊ธ ์์ธ๋ณด๊ธฐ ํ์ด์ง (1) | 2023.11.01 |
| ๊ฒ์ํ ๋ง๋ค๊ธฐ 2 -๊ฒ์ํ ์ ๋ชฉ ๋ฐ ๊ฒ์๊ธ ๋ชฉ๋ก (1) | 2023.11.01 |