[Spring] GeoIp2를 사용한 해외 아이피 차단 포스팅 썸네일 이미지

백엔드/Spring

[Spring] GeoIp2를 사용한 해외 아이피 차단

목적 해외에서 들어오는 해킹시도를 막기 위함 목차 해킹시도 해외 IP 차단하기 1. 해킹시도 최근에 제작한 서비스를 AWS EC2에 배포하여 운영중에 다음과 같은 예외를 보게 되었다. 처음보는 IP에서 수상한 url 경로로 접속한 것이었다. 찾아보니 /index.php s=/index/ think app/invokefunction&function ... 러시아의 모스크바에서 php서버 취약점에 대한 공격시도였다. 다행히 내 서비스는 스프링부트여서 예외를 뱉어냈다. 하지만 그럼에도 내 서비스에는 해외에서 접근할 일이 없기에 해외 IP의 접근을 모두 막고 싶었다. 또한 스프링부트에서 해외 IP차단에 관련한 글은 찾기가 힘들어 이에 대한 가이드 라인을 제공하고자 글을 작성하게 되었다. 2. 해외 IP 차단하기..

2021.07.28 게시됨

[Spring] JASYPT를 사용한 프로퍼티 암호화 포스팅 썸네일 이미지

백엔드/Spring

[Spring] JASYPT를 사용한 프로퍼티 암호화

목적 git의 public repository와 CI/CD를 연동해 어플리케이션을 배포하는데 있어 중요한 정보가 탈취되는 것을 막기 위함 목차 JASYPT란? 사용방법 1. JASYPT란? 홈페이지에 가보면 아래와 같이 적혀있다. Jasypt is a java library which allows the developer to add basic encryption capabilities to his/her projects with minimum effort, and without the need of having deep knowledge on how cryptography works. Jasypt는 개발자가 암호화 작동 방식에 대한 깊은 지식 없이도 최소한의 노력으로 자신의 프로젝트에 기본 암호화 기능..

2021.07.27 게시됨

백엔드/Spring Security

[Spring Security] JWT 로그인 구현하기

목적 세션을 사용하지 않고 로그인을 구현하기 위함 목차 의존성 추가 UserDetails 생성 UserRepository 추가 UserDetailsService 생성 JWT유틸 클래스 추가 JWT필터 추가 스프링 시큐리티 설정 스프링 설정 컨트롤러 설정 Refresh Token을 활용한 JWT로그인의 구현은 아래 링크를 참조하면 되겠다. https://emgc.tistory.com/148 1. 의존성 추가 jwt 의존성을 추가해준다 아래는 gradle 기준이다. implementation 'io.jsonwebtoken:jjwt:0.9.1' 2. UserDetails 생성 스프링 시큐리티에서 관리하는 UserDetails타입의 객체를 생성해야한다. 기본 필드 및 메서드 외 필요한 것들은 추가해서 사용하면 ..

2021.06.25 게시됨

[Spring Security] Role Hierarchy 설정하기 포스팅 썸네일 이미지

백엔드/Spring Security

[Spring Security] Role Hierarchy 설정하기

목적 권한 계층구조를 만들어 효율적인 권한관리를 하기 위함 목차 기존 권한 계층구조의 문제점 설정 방법 1. 기존 권한 계층구조의 문제점 기본적으로 스프링 시큐리티에서 요구하는 방식은 위와같이 여러 권한이 Collection인터페이스에 담겨있는 형태이다. 권한이 ADMIN, MANAGER, USER 총 세 개가 존재한다고 가정해보자. 관리자의 경우엔 ADMIN, MANAGER, USER권한 세 개를 다 가져야 하고, 매니저의 경우엔 MANAGER, USER권한 두 개를 가져야 한다. 관리자가 ADMIN권한 한 개만 갖고 있다면, 어떠한 URL접근에 필요한 권한이 USER일때 관리자는 USER권한이 없기 때문에 접근할 수 없는 문제가 발생한다. 또한 서버에서도 권한설정을 할때 관리자까지 접근하도록 설정하려..

2021.06.24 게시됨

[Spring] 스프링의 CORS설정 포스팅 썸네일 이미지

백엔드/Spring

[Spring] 스프링의 CORS설정

목적 CORS를 이해하여 서로 다른 출처간의 자원공유를 원활히 하기 위함 목차 CORS란 스프링의 CORS설정 스프링 시큐리티의 CORS설정 스프링의 CORS? 스프링 시큐리티의 CORS? 1. CORS란? CORS란Cross-Origin Resource Sharing, 교차 출처 리소스 공유의 약자이다. 서로 출처가 다른 웹 애플리케이션에서 자원을 공유하는 것을 말한다. 여기서 출처는 '프로토콜://도메인:포트' 이다. 예를 들자면 http://localhost:8080 이다. CORS에러 [cors에러] 프론트엔드와 백엔드의 출처가 다르면 위와 같은 에러를 심심치 않게 볼 수 있다. 브라우저는 보안상의 이유로 교차 출처 HTTP요청을 제한한다. 이를 해결하기 위해선 백엔드에 CORS관련..

2021.06.23 게시됨

[Spring] 스프링 프로파일 환경별로 빌드하기 포스팅 썸네일 이미지

백엔드/Spring

[Spring] 스프링 프로파일 환경별로 빌드하기

목적 환경별로 스프링 프로파일(application.yml 또는 application.properties)를 설정하기 위함 목차 환경별 프로파일 구분의 필요성 프로파일 구분 과정 1. 환경별 프로파일 구분의 필요성 일반적으로 프로파일은 resources폴더 아래에 가져다놓고 빌드를 하게 되면 resources에 속한 모든 파일이 jar에 포함되게 된다. 혹여나 다른 서로 다른 개발환경에서 프로파일을 구분하지 않고 빌드 했을 경우, jar에는 모든 프로파일이 담기게 된다. 누군가 악의을 품고 jar파일을 뜯어서 중요한 정보를 탈취할 수 도 있는 일이다. 2. 프로파일 구분 과정 프로파일의 구분 과정은 크게 2가지로 나뉜다. gradle에서 함께 빌드하고자 하는 프로파일만을 jar에 포함시킨다. 스프링에서 ..

2021.06.21 게시됨

[Spring] 스프링의 로깅 포스팅 썸네일 이미지

백엔드/Spring

[Spring] 스프링의 로깅

목적 로깅에 대한 지식과 사용방법을 익혀 개발에 도움이 되게 하기 위함 목차 스프링의 로깅 프레임워크 Lombok의 로거 애노테이션 로그 레벨 로그 메시지에 파라미터 넣기 로깅 Layout 로그 출력하기 logback-spring.xml 1. 스프링의 로깅 프레임워크 스프링은 기본적으로 로깅프레임워크를 의존성을 갖고 있다. Log4J, SLF4J, Logback 세 가지 이다. Logback은 로깅 프레임워크 중 하나이다. SLF4j는 로깅 프레임워크의 구현이 아니고, Log4J와 유사한 Java의 모든 로깅 프레임 워크에 대한 추상화이다. 추상화라함은 공통된 개념은 뽑아내고 자세한 구현은 감춘다는 얘기로, SLF4J는 로깅 프레임워크들의 공통된 API를 제공하고, 그에 대한 구현은 프레임워크에서 각각 ..

2021.06.20 게시됨

[JPA] EnumType 올바르게 사용하기 포스팅 썸네일 이미지

백엔드/JPA

[JPA] EnumType 올바르게 사용하기

목적 @Enumerated을 사용하여 컬럼에 들어간 값을 확실히 식별하기 위함 목차 @Enumerated와 기본값 올바르게 사용하기 1. @Enumerated와 기본값 Enumerated 애노테이션은 특정 필드가 열거형으로 저장되어야 할때 사용된다. enum타입으로 선언된 필드 위에 사용한다. 하지만 그대로 사용했다가는 문제가 발생할 수 있다. @Enumerated의 기본값은 ordinal로 설정되어있다. ordinal은 enum에서 열거형의 순서를 나타낸다. 따라서 기본값이 ordinal로 설정되어있다는 말은 DB에 저장될 때 순서값 즉, 숫자로 저장된다는 것이다. 캐나다에 사는 kim과 서울에 사는 park객체를 만들고 DB에 저장하면 숫자로만 저장된다. 추후에 두번째 있던 CANADA가 마지막순서로..

2021.06.19 게시됨