팀프로젝트/SpringBoot

스프링부트 팀플) 20240319 사용자가 게시판 접속 시 랜덤값 생성

일일일코_장민기 2024. 3. 19. 19:45
728x90

컨트롤러

//게시판 글 목록 보기

@GetMapping("/viewDBoardList/{orderBy}")

public ModelAndView viewDBoardList(@PathVariable("orderBy") String orderBy, HttpServletRequest request) {

 

//게시판으로 바로 들어왔을 경우, 사용자 식별을 위한 값 저장

ServletContext application = request.getServletContext();

String key = (String) application.getAttribute("save");

if(key == null) {

key = getNum();

application.setAttribute("save", key);

}

 

List<DebugBoardDTO> list = serv.viewDBoardList(orderBy);

ModelAndView mav = new ModelAndView();

mav.addObject("list", list);

mav.setViewName("member/Test/viewDBoardList");

return mav;

}

 

사용자가 게시판에 접속할 경우, 랜덤으로 생성된 16자리 숫자를 application에 저장

이를 통해 무한 조회수 늘리기, 무한 추천을 막을 예정이다.

 

원래는 IP를 암호화해서 사용하려고 했었다.

//게시판 사용자 어플리케이션용 암호화 IP 가져오기

public static String getIp(){

String result = null;

try {

result = InetAddress.getLocalHost().getHostAddress();

} catch (UnknownHostException e) {

result = "";

}

result = SecurityController.encrypt(result);

return result;

}

 

하지만 보안 문제도 있고 하니, 랜덤 숫자로 선회했다.

//게시판 사용자 어플리케이션용 무작위 16자리 숫자 가져오기

public String getNum() {

Random r = new Random();

StringBuilder randomNumber = new StringBuilder();

for (int i = 0; i < 16; i++) {

randomNumber.append(r.nextInt(10));

}

System.out.println(randomNumber.toString());

return randomNumber.toString();

}

 

 

그런데 이 코드를 사방팔방에 붙여놓을 수도 없는 노릇이기 때문에 게시판 글 리스트와 게시판 글 외에는 POST로 처리함으로서 url로 들어가지 못하게 막았다 

 

딱 두 함수만 GetMapping 처리

 

기존의 jsp에 사용했던 window.location.href도 전부 post로 수정했다.

그런데 post는 form이랑 ajax 밖에 없다고 하니 form으로 처리했다.

 

<!-- post로 글 수정 / 삭제 / 목록 -->

<div>

<form action="<c:url value='/checkUpdatePost'/>/${dto.boardNum}" method="post" style="display: inline-block;">

<input type="submit" id="update" value="글 수정">

</form>

<form action="<c:url value='/checkDeletePost'/>/${dto.boardNum}" method="post" style="display: inline-block;">

<input type="submit" id="delete" value="글 삭제">

</form>

<form action="<c:url value='/viewDBoardList/boardNum'/>" method="get" style="display: inline-block;">

<input type="submit" id="list" value="글 목록">

</form>

</div>

 

style="display: inline-block;"가 없으면 세로로 기차놀이를 하기 때문에 넣어주어야 한다.

가로로 나란히 잘 출력된다.

 

 

 

추가 개선 사항

- 같은 닉네임으로 검색 기능(확인창 출력)
- 당일 날짜는 시분 || 그 외 날짜는 연월일

- 페이지네이션

- 게시판 / 글 꾸미기...