This commit is contained in:
dyhj625 2025-01-09 16:07:14 +09:00
parent d8b303cf7b
commit 523ba9cc45
6 changed files with 74 additions and 55 deletions

View File

@ -76,7 +76,9 @@ public class SecurityConfig {
http http
.securityMatcher("/api/**") // '/api/**' 경로에 대해서만 보안 적용 .securityMatcher("/api/**") // '/api/**' 경로에 대해서만 보안 적용
.authorizeHttpRequests(auth -> .authorizeHttpRequests(auth ->
auth.anyRequest().access(authorizationManager) // 모든 요청에 대해 권한 관리 auth.requestMatchers("/api/board/general").permitAll() // 특정 엔드포인트 허용
.anyRequest().authenticated() // 나머지 요청은 인증 필요
//auth.anyRequest().access(authorizationManager) // 모든 요청에 대해 권한 관리
) )
// 세션 관리 설정 // 세션 관리 설정
.sessionManagement(session -> .sessionManagement(session ->

View File

@ -1,5 +1,7 @@
package io.company.localhost.controller.api; package io.company.localhost.controller.api;
import java.nio.charset.StandardCharsets;
import java.sql.Blob;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -37,7 +39,18 @@ public class BoardController {
@GetMapping("/general") @GetMapping("/general")
public ApiResponse<List<Map<String, Object>>> getGeneralPosts() { public ApiResponse<List<Map<String, Object>>> getGeneralPosts() {
List<Map<String, Object>> posts = boardService.getGeneralPosts(); List<Map<String, Object>> posts = boardService.getGeneralPosts();
System.out.println(posts); for (Map<String, Object> post : posts) {
Object content = post.get("content");
if (content instanceof Blob) {
Blob blob = (Blob) content;
try {
post.put("content", new String(blob.getBytes(1, (int) blob.length()), StandardCharsets.UTF_8));
} catch (Exception e) {
post.put("content", ""); // 변환 실패 기본 설정
}
}
}
System.out.println(posts);
return ApiResponse.ok(posts); return ApiResponse.ok(posts);
} }
//게시물 작성 //게시물 작성

View File

@ -6,6 +6,8 @@ import java.util.Map;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import io.company.localhost.common.dto.MapDto;
@Mapper @Mapper
public interface LocalBordMapper { public interface LocalBordMapper {
// 공지사항 조회 // 공지사항 조회
@ -15,37 +17,37 @@ public interface LocalBordMapper {
List<Map<String, Object>> getGeneralPosts(); List<Map<String, Object>> getGeneralPosts();
// 게시물 작성 // 게시물 작성
void createBoard(Map<String, Object> params); void createBoard(MapDto map);
// 첨부파일 저장 // 첨부파일 저장
void addAttachment(Map<String, Object> params); void addAttachment(MapDto map);
// 게시물 삭제 // 게시물 삭제
void deleteBoard(Map<String, Object> params); void deleteBoard(MapDto map);
// 게시물 수정 // 게시물 수정
void updateBoard(Map<String, Object> params); void updateBoard(MapDto map);
// 게시물 좋아요/싫어요 추가 // 게시물 좋아요/싫어요 추가
void reactToBoard(Map<String, Object> params); void reactToBoard(MapDto map);
// 댓글 조회 // 댓글 조회
List<Map<String, Object>> getComments(int boardSeq); List<Map<String, Object>> getComments(int boardSeq);
// 댓글/대댓글 작성 // 댓글/대댓글 작성
void addCommentOrReply(Map<String, Object> params); void addCommentOrReply(MapDto map);
// 댓글/대댓글 수정 // 댓글/대댓글 수정
void updateComment(Map<String, Object> params); void updateComment(MapDto map);
// 댓글/대댓글 삭제 // 댓글/대댓글 삭제
void deleteComment(Map<String, Object> params); void deleteComment(MapDto map);
// 게시물 비밀번호 확인 // 게시물 비밀번호 확인
boolean checkBoardPassword(Map<String, Object> params); boolean checkBoardPassword(MapDto map);
// 댓글 비밀번호 확인 // 댓글 비밀번호 확인
boolean checkCommentPassword(Map<String, Object> params); boolean checkCommentPassword(MapDto map);
// 비밀 게시판 여부 확인 // 비밀 게시판 여부 확인
boolean isSecretBoard(Long boardId); boolean isSecretBoard(Long boardId);

View File

@ -5,6 +5,7 @@ import java.util.Map;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import io.company.localhost.common.dto.MapDto;
import io.company.localhost.mapper.LocalBordMapper; import io.company.localhost.mapper.LocalBordMapper;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@ -21,48 +22,48 @@ public class LocalBordService {
return boardMapper.getGeneralPosts(); return boardMapper.getGeneralPosts();
} }
public void createBoard(Map<String, Object> params) { public void createBoard(MapDto map) {
boardMapper.createBoard(params); boardMapper.createBoard(map);
} }
public void addAttachment(Map<String, Object> params) { public void addAttachment(MapDto map) {
boardMapper.addAttachment(params); boardMapper.addAttachment(map);
} }
public void deleteBoard(Map<String, Object> params) { public void deleteBoard(MapDto map) {
boardMapper.deleteBoard(params); boardMapper.deleteBoard(map);
} }
public void updateBoard(Map<String, Object> params) { public void updateBoard(MapDto map) {
boardMapper.updateBoard(params); boardMapper.updateBoard(map);
} }
public void reactToBoard(Map<String, Object> params) { public void reactToBoard(MapDto map) {
boardMapper.reactToBoard(params); boardMapper.reactToBoard(map);
} }
public List<Map<String, Object>> getComments(int boardSeq) { public List<Map<String, Object>> getComments(int boardSeq) {
return boardMapper.getComments(boardSeq); return boardMapper.getComments(boardSeq);
} }
public void addCommentOrReply(Map<String, Object> params) { public void addCommentOrReply(MapDto map) {
boardMapper.addCommentOrReply(params); boardMapper.addCommentOrReply(map);
} }
public void updateComment(Map<String, Object> params) { public void updateComment(MapDto map) {
boardMapper.updateComment(params); boardMapper.updateComment(map);
} }
public void deleteComment(Map<String, Object> params) { public void deleteComment(MapDto map) {
boardMapper.deleteComment(params); boardMapper.deleteComment(map);
} }
public boolean checkBoardPassword(Map<String, Object> params) { public boolean checkBoardPassword(MapDto map) {
return boardMapper.checkBoardPassword(params); return boardMapper.checkBoardPassword(map);
} }
public boolean checkCommentPassword(Map<String, Object> params) { public boolean checkCommentPassword(MapDto map) {
return boardMapper.checkCommentPassword(params); return boardMapper.checkCommentPassword(map);
} }

View File

@ -4,6 +4,14 @@ project:
time-zone: Asia/Seoul time-zone: Asia/Seoul
spring: spring:
datasource:
url: jdbc:mariadb://192.168.0.251:3306/localnet
username: root
password: host1234
driver-class-name: org.mariadb.jdbc.Driver
devtools:
livereload:
enabled: true
application: application:
name: ${project.name} name: ${project.name}
config: config:
@ -19,8 +27,8 @@ spring:
mybatis: mybatis:
mapper-locations: classpath:mapper/**/*.xml mapper-locations: classpath:mapper/**/*.xml
#상태 모니터링 (재시작,메모리 등등 관리해줌) # 상태 모니터링 (재시작, 메모리 등등 관리)
#localhost:10325/health 로 보면 됨 # localhost:10325/health 로 확인 가능
management: management:
health: health:
defaults: defaults:
@ -31,7 +39,7 @@ management:
path-mapping: path-mapping:
health: check health: check
exposure: exposure:
include: health,prometheus,metrics include: health, prometheus, metrics
endpoint: endpoint:
health: health:
show-details: never show-details: never
@ -45,16 +53,15 @@ management:
server: server:
max-uri-tags: 200 max-uri-tags: 200
server: server:
shutdown: graceful shutdown: graceful
port: 10325 port: 10325
tomcat: tomcat:
max-http-form-post-size: 20MB max-http-form-post-size: 20MB
max-connections: 1024 # default 8192 max-connections: 1024 # 기본값 8192
threads: threads:
min-spare: 51 min-spare: 51
max: 101 # default 200 max: 101 # 기본값 200
servlet: servlet:
encoding: encoding:
charset: UTF-8 charset: UTF-8
@ -66,12 +73,11 @@ server:
timeout: 300m timeout: 300m
cookie: cookie:
path: / path: /
# 쿠키 보안 # 쿠키 보안 설정
http-only: true http-only: true
secure: true secure: true
same-site: NONE same-site: NONE
# logging
logging: logging:
level: level:
jdbc: jdbc:
@ -82,5 +88,4 @@ logging:
resultset: off resultset: off
connection: off connection: off
io.company: DEBUG io.company: DEBUG
io.company.localhost.mapper : off io.company.localhost.mapper: off

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="io.company.localhost.mapper.LocalBordMapper.xml"> <mapper namespace="io.company.localhost.mapper.LocalBordMapper">
<!-- 공지사항 조회 --> <!-- 공지사항 조회 -->
<select id="getNotices" resultType="java.util.Map"> <select id="getNotices" resultType="java.util.Map">
@ -20,19 +20,15 @@
</select> </select>
<!-- 자유/비밀 게시판 조회 --> <!-- 자유/비밀 게시판 조회 -->
<select id="getGeneralPosts" resultType="java.util.Map"> <select id="getGeneralPosts" resultType="map">
SELECT SELECT
LOCBRDSEQ AS id, LOCBRDSEQ AS id,
LOCBRDTTL AS title, LOCBRDTTL AS title,
LOCBRDCON AS content, LOCBRDCON AS content,
LOCBRDRDT AS date, LOCBRDRDT AS date
LOCBRDTYP AS type, FROM localbord
MEMBERSEQ AS member, WHERE LOCBRDTYP IN ('F', 'S')
LOCBRDCNT AS cnt, ORDER BY LOCBRDRDT DESC
LOCBRDCAT AS catagory
FROM localbord
WHERE b.LOCBRDTYP IN ('F', 'S')
ORDER BY b.LOCBRDRDT DESC
</select> </select>
<!-- 게시물 작성 --> <!-- 게시물 작성 -->