본문 바로가기
개발 공부 Today I Learned

[국비 45일차 TIL] 방문 흔척 찾기, 게시글에 로그인 ip 추가

by 개발자신입 2024. 1. 23.
반응형

 

comment.java


// HTML에서 특수기호 < > 변경하기 + 줄바꿈 처리하기
commentcontent = Util.removeTag(commentcontent); = 주어진 문자열에서 HTML 태그를 제거하는 역할을 함. 

 

// Util.java

	public static String removeTag(String str) {
		str = str.replaceAll("<", "&lt");
		str = str.replaceAll(">", "&gt");
		return str;
	}

 


// 엔터가 가능하도록 (\r, \n, \nr 을 엔터로 변경)
commentcontent = Util.addBR(commentcontent); = 주어진 문자열에서 개행문자 (\r, \n, \r\n)를 <br>태그로 변경.

 

// Util.java

	public static String addBR(String str) {
		return str.replaceAll("(\r\n|\r|\n|\n\r)", "<br>");
	   }

 

 


 

BoardDAO

 

추가내용=

dto.setClike(rs.getInt("clike"));
dto.setIp(Util.ipMasking(rs.getString("cip")));

 

 

		public List<CommentDTO> commentList(int no) {
			List<CommentDTO> list = new ArrayList<CommentDTO>();
			
			Connection con = db.getConnection();
			PreparedStatement pstmt = null;
			ResultSet rs = null;
			String sql="SELECT * FROM commentview WHERE board_no=?";
			
			try {
				pstmt = con.prepareStatement(sql);
				pstmt.setInt(1, no);
				rs = pstmt.executeQuery();
				
				while(rs.next()) {
					CommentDTO dto = new CommentDTO();
					dto.setCno(rs.getInt("cno"));
					dto.setBoard_no(rs.getInt("board_no"));
					dto.setComment(rs.getString("ccomment"));
					dto.setCdate(rs.getString("cdate"));
					dto.setMno(rs.getInt("mno")); // view 만들어서 mname, mid 가져와야 함.
					dto.setMid(rs.getString("mid"));
					dto.setMname(rs.getString("mname"));
					dto.setClike(rs.getInt("clike"));
					dto.setIp(Util.ipMasking(rs.getString("cip")));
					
					list.add(dto);
				}
			} catch (SQLException e) {
				e.printStackTrace();
			} finally {
				close(rs, pstmt, con);
			}
			return list;
		}
}

 

 

Util.java

 

	// ip가져오기
	public static String getIP(HttpServletRequest request) {
	      String ip = request.getHeader("X-FORWARDED-FOR");
	      if(ip == null) {
	         ip = request.getHeader("Proxy-Client-IP");
	      }
	      if(ip == null) {
	         ip = request.getHeader("WL-Proxy-Client-IP");   
	      }
	      if(ip == null) {
	         ip = request.getHeader("HTTP_CLIENT_IP");
	      }
	      if(ip == null) {
	         ip = request.getHeader("HTTP_X_FORWARDED_FOR");
	      }
	      if(ip == null) {
	         ip = request.getRemoteAddr();
	      }
	      return ip;
	   }

	// HTML태그를 특수기호로 변경 < &lt /  > &gt
	public static String removeTag(String str) {
		str = str.replaceAll("<", "&lt");
		str = str.replaceAll(">", "&gt");
		return str;
	}
	
	public static String addBR(String str) {
		return str.replaceAll("(\r\n|\r|\n|\n\r)", "<br>");
	   }
	
	public static String ipMasking(String ip) {
	    if(ip.indexOf('.') != -1) { // ip가 아닐때
	        StringBuffer sb = new StringBuffer(); // 멀티스레드 환경에서 동기화 지원
	        sb.append(ip.substring(0, ip.indexOf('.')+1));
	        sb.append("♡.");
	        sb.append(ip.substring(ip.indexOf('.', ip.indexOf('.')+1)+1));
	        
	        return sb.toString(); // Convert StringBuffer to String and return
	    } else { 
	        return ip;
	    }
	}

 

BoardDTO

private String ip; 추가 

 

	public String getIp() {
		return Util.ipMasking(ip);
	}
	public void setIp(String ip) {
		this.ip = ip;
	}

 

 

LogDAO.java

 

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Map;

import com.coffee.util.Util;

public class LogDAO extends AbstractDAO {

	public void write(Map<String, Object> log) {
		Connection con = db.getConnection();
		PreparedStatement pstmt = null;
		String sql = "INSERT INTO iplog(iip, iurl, idata) VALUES (?,?,?)";
		
		try {
			pstmt = con.prepareStatement(sql);
			pstmt.setString(1, log.get("ip").toString());
			pstmt.setString(2, log.get("url").toString());
			pstmt.setString(3, log.get("data").toString());
			
			pstmt.execute();
			  
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			close(null, pstmt, con);
		}
	}
	
}

 

 

detail.java

 

		// 로그인한 회원이라면 조회수 올리기 2024-01-19
		HttpSession session = request.getSession();
		if(session.getAttribute("mid") != null) {
			//bno, mno
			dao.countUp(no,(String) session.getAttribute("mid"));
		}

 

 

index.java

 

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	
		LogDAO log = new LogDAO();
		log.logwrite(Util.getIP(request), "./index", null);

 

 

 

패키지와 클래스가 하나씩 늘어갈수록 오류가 점점 많아진다. 

하나 수정하면 다른 곳이 갑자기 에러나고.... 

갑자기 내 회원가입은 왜 안되는건지!!

도움 요청 전에 혼자 고쳐보려고 노력은 하는데 어렵다 어려워

코딩 너무 복잡하다 ㅠㅠ 쉽지않고만..........

 

반응형

댓글