언어/JAVA 15

request.getRemoteAddr()로 정확한 IP 추출이 되지 않을 때..

아마 접근IP를 추출하기 위해 많이 쓰는 메소드로 request.getRemoteAddr()가 있을 것 이다. 근데 100% 정확한 ip 추출이 되지 않는 것을 최근 경험하여 검색하고 수정 한 것을 다른 사람들도 편하게 찾을 수 있게 남겨보려 한다. 우선 원인은 중간에 L4나 프록시 서버 등이 생기며 변조되는 문제였다. 내 업무지의 경우 클라우드로 나가면서 보안을 위해 여러 장비를 통해 web에 전달되다보니 발생하였다. (WAF -> LB -> WEB) 그래도 마냥 불가능하진 않다. 추가적인 header들이 생기면서 원래의 ip가 저장이 된다고 한다. 이걸 이용하여서 추출하여 사용하고 싶은곳에 사용 할 수 있다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 Str..

언어/JAVA 2023.05.11

에라토스테네스의 체

소수를 찾는 대표적인 방법중 하나 " k=2 부터 √N 이하까지 반복하여 자연수들 중 k를 제외한 k의 배수들을 제외시킨다" 최근에 알고리즘을 기초부터 다시 공부하다가 알게되었다. public class Eratos { public static void main(String[] args) { // ArrayList로 구현 ArrayList primeList; // 사용자로부터의 콘솔 입력 Scanner scan = new Scanner(System.in); int n = scan.nextInt(); // n

언어/JAVA 2022.11.15

배열 복사 : clone() 과 arraycopy()

배열 A = 배열 B 의 형식으로 복사를 하면 주소값을 복사하는 형식이라 한쪽을 수정하면 다른 한쪽에서도 변경되버림 그래서 clone()과 arraycopy()를 찾아보았고 clone()은 원본과는 별개의 주소값의 배열을 만드는 것이고 arraycopy()는 배열 A = 배열 B와 같은 결과지만 속도는 겁나 빠르단다(본인은 한번도 안써봄) 덤으로, 주소값만 복사하는 걸 shallow clone, 내용물을 복사하여 별개의 객체를 만드는 것을 deep clone이라고 합다.

언어/JAVA 2022.11.09

HSSFCellStyle 셀 스타일 배경색 지정

특정 분류 값에 따라 배경색을 다르게 주고 싶어서 생각하고 진행했는데 분기도 잘 타고 색 세팅도 잘 되는데 정작 엑셀을 다운로드하면 하나의 색깔만 됨(첫 분기를 타는 색) 그래서 물어물어 해결했다. HSSFCellStyle는 Call by reference라서 하나의 객체로 분기태우며 색을 다르게 세팅해봤자 계속해서 덮어진다.. 그래서 HSSFCellStyle 객체를 2개 만들어서 세팅해주니 완성.. 너무 기본에 무지함을 느낀 경험이었다. * Call by reference란? - 매개변수에 변수의 주소를 전달하여 메소드 내에서 수정한 내용이 메소드 밖에서도 적용되게 하는 기법입니다. Call by value란? - 매개변수를 주어진 값을 복사하여 전달하는 방식으로 메소드 내에서 변경한 값은 메소드 밖의..

언어/JAVA 2022.07.25

해외IP 차단 기능 개발

프로젝트 과업 진행중 진행한 방법을 안 까먹으려고 작성 우선 처음엔 국내 ip 대역폭을 db에 화이트리스트처럼 저장해두고 체크할까하다가 한국인터넷진흥원에 오픈API를 제공하는게 있어서 그거 사용 API 예시는 인터넷 진흥원에 있으니 넘어가고 받아와서 그 후 xml로 응답받은 데이터를 처리하여 원하는 데이터만 뽑는 부분만 적어두려함 DocumentBuilderFactory fac = DocumentBuilderFactory.newInstance(); try{ DocumentBuilder builder = fac.newDocumentBuilder(); try{ // sb는 StringBuilder에 응답받은 xml 데이터를 담고 있는 변수 Document doc = builder.parse(new Input..

언어/JAVA 2022.06.22

시큐어코딩 TOCTOU 해결 방법

최근에 프로젝트 중 시큐어코딩 점검을 해서 걸린 것중에 하나를 까먹지 않기 위해 적어둠 File file = new File(url); if(file.exist()) { //파일이 존재하면 file.delete(); //파일을 지워라 } 하지만 안전하지가 않다고 검출되어 구글링을 찾아보니 위와 같이 삭제하는 것이 아닌 동기화 함수를 사용하여 삭제하는게 안전하다고 한다 ex) File file = new File(url); public synchronized void fileDelete(File file) { file.delete(); ) if(file.exist()) { //파일이 존재하면 fileDelete(file); //파일을 지워라 }

언어/JAVA 2022.02.26
728x90
반응형