게시판 암호화추가

This commit is contained in:
dyhj625 2025-01-17 13:29:19 +09:00
parent a3ebdc3c65
commit cd81956d7c
4 changed files with 58 additions and 36 deletions

View File

@ -26,6 +26,7 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PathVariable;
@ -53,6 +54,7 @@ import lombok.extern.slf4j.Slf4j;
@Slf4j @Slf4j
public class BoardController { public class BoardController {
private final localbordService boardService; private final localbordService boardService;
private final PasswordEncoder passwordEncoder;
/** /**
* 공지사항 목록 조회 * 공지사항 목록 조회
@ -128,11 +130,18 @@ public class BoardController {
*/ */
@PostMapping @PostMapping
public ApiResponse<?> createBoard(@ReqMap MapDto map) { public ApiResponse<?> createBoard(@ReqMap MapDto map) {
BigInteger createdIdx = boardService.createBoard(map); // 작성된 게시물의 idx를 반환 // 비밀번호 암호화 (익명 게시판 비밀번호가 필요한 경우)
Map<String, Object> responseData = new HashMap<>(); if (map.containsKey("LOCBRDPWD")) {
responseData.put("CMNBRDSEQ", createdIdx); String rawPassword = map.getString("LOCBRDPWD");
responseData.put("message", "게시물이 작성되었습니다."); String encodedPassword = passwordEncoder.encode(rawPassword);
return ApiResponse.ok(responseData); map.put("LOCBRDPWD", encodedPassword);
}
BigInteger createdIdx = boardService.createBoard(map); // 작성된 게시물의 idx를 반환
Map<String, Object> responseData = new HashMap<>();
responseData.put("CMNBRDSEQ", createdIdx);
responseData.put("message", "게시물이 작성되었습니다.");
return ApiResponse.ok(responseData);
} }
/** /**
@ -246,8 +255,12 @@ public class BoardController {
*/ */
@PostMapping("/{LOCBRDSEQ}/comment") @PostMapping("/{LOCBRDSEQ}/comment")
public ApiResponse<String> addCommentOrReply(@ReqMap MapDto map) { public ApiResponse<String> addCommentOrReply(@ReqMap MapDto map) {
// 부모 댓글 확인 // 비밀번호 암호화 (비밀번호가 있는 경우에만)
if (map.containsKey("LOCCMTPWD")) {
String rawPassword = map.getString("LOCCMTPWD");
String encodedPassword = passwordEncoder.encode(rawPassword);
map.put("LOCCMTPWD", encodedPassword);
}
boardService.addCommentOrReply(map); boardService.addCommentOrReply(map);
return ApiResponse.ok("댓글 또는 대댓글이 작성되었습니다."); return ApiResponse.ok("댓글 또는 대댓글이 작성되었습니다.");
@ -294,10 +307,15 @@ public class BoardController {
*/ */
@PostMapping("/comment/{commentId}/password") @PostMapping("/comment/{commentId}/password")
public ApiResponse<Boolean> checkCommentPassword(@PathVariable("commentId") int commentId, @ReqMap MapDto map) { public ApiResponse<Boolean> checkCommentPassword(@PathVariable("commentId") int commentId, @ReqMap MapDto map) {
map.put("LOCCMTSEQ", commentId); // DB에서 암호화된 비밀번호 조회
return ApiResponse.ok(boardService.checkCommentPassword(map)); String storedPassword = boardService.getCommentPassword(commentId);
String rawPassword = map.getString("LOCCMTPWD");
// 비밀번호 검증
boolean isMatch = passwordEncoder.matches(rawPassword, storedPassword);
return ApiResponse.ok(isMatch);
} }
/** /**
* 게시물 비밀번호 확인 * 게시물 비밀번호 확인
* @param boardId 게시물 ID * @param boardId 게시물 ID
@ -306,8 +324,13 @@ public class BoardController {
*/ */
@PostMapping("/{boardId}/password") @PostMapping("/{boardId}/password")
public ApiResponse<Boolean> checkBoardPassword(@PathVariable("boardId") int boardId, @ReqMap MapDto map) { public ApiResponse<Boolean> checkBoardPassword(@PathVariable("boardId") int boardId, @ReqMap MapDto map) {
map.put("LOCBRDSEQ", boardId); // DB에서 암호화된 비밀번호 조회
return ApiResponse.ok(boardService.checkBoardPassword(map)); String storedPassword = boardService.getBoardPassword(boardId);
String rawPassword = map.getString("LOCBRDPWD");
// 비밀번호 검증
boolean isMatch = passwordEncoder.matches(rawPassword, storedPassword);
return ApiResponse.ok(isMatch);
} }
// /** // /**

View File

@ -42,12 +42,12 @@ public interface localbordMapper {
// 댓글/대댓글 삭제 // 댓글/대댓글 삭제
void deleteComment(MapDto map); void deleteComment(MapDto map);
// 게시물 비밀번호 조회
String selectCommentPassword(int commentId);
// 게시물 비밀번호 확인 // 댓글 비밀번호 조회
boolean checkBoardPassword(MapDto map); String selectBoardPassword(int boardId);
// 댓글 비밀번호 확인
boolean checkCommentPassword(MapDto map);
// 비밀 게시판 여부 확인 // 비밀 게시판 여부 확인
boolean isSecretBoard(Long boardId); boolean isSecretBoard(Long boardId);

View File

@ -77,21 +77,16 @@ public class localbordService {
boardMapper.deleteComment(map); boardMapper.deleteComment(map);
} }
public boolean checkBoardPassword(MapDto map) { public String getCommentPassword(int commentId) {
return boardMapper.checkBoardPassword(map); return boardMapper.selectCommentPassword(commentId);
}
public boolean checkCommentPassword(MapDto map) {
return boardMapper.checkCommentPassword(map);
}
public boolean isSecretBoard(Long boardId) {
return boardMapper.isSecretBoard(boardId);
} }
public void reactToComment(MapDto map) { public String getBoardPassword(int boardId) {
boardMapper.reactToComment(map); return boardMapper.selectBoardPassword(boardId);
}
public boolean isSecretBoard(Long boardId) {
return boardMapper.isSecretBoard(boardId);
} }
public MapDto getCommentById(int commentId) { public MapDto getCommentById(int commentId) {

View File

@ -118,14 +118,18 @@
WHERE LOCCMTSEQ = #{LOCCMTSEQ} WHERE LOCCMTSEQ = #{LOCCMTSEQ}
</delete> </delete>
<!-- 비밀번호 확인 (게시물) --> <!-- 댓글 비밀번호 조회 -->
<select id="checkBoardPassword" resultType="boolean"> <select id="selectCommentPassword" resultType="String">
SELECT COUNT(*) > 0 FROM localbord WHERE LOCBRDSEQ = #{LOCBRDSEQ} AND LOCBRDPWD = #{LOCBRDPWD} SELECT LOCCMTPWD
FROM localcomt
WHERE LOCCMTSEQ = #{commentId}
</select> </select>
<!-- 비밀번호 확인 (댓글) --> <!-- 게시물 비밀번호 조회 -->
<select id="checkCommentPassword" resultType="boolean"> <select id="selectBoardPassword" resultType="String">
SELECT COUNT(*) > 0 FROM localcomt WHERE LOCCMTSEQ = #{LOCCMTSEQ} AND LOCCMTPWD = #{LOCCMTPWD} SELECT LOCBRDPWD
FROM localbord
WHERE LOCBRDSEQ = #{boardId}
</select> </select>
<!-- 비밀 게시판 여부 확인 --> <!-- 비밀 게시판 여부 확인 -->