Programming/Spring Boot
[Spring Security] 수동 인증(강제 로그인)
Spring 프로젝트를 진행하다보면 정의되지 않은 폼을 통해서 인증 처리를 해주어야 하는 경우가 있다. 이럴 때 특정 인가된 정보를 SecurityContext에 수동으로 등록해주고 세션에 주입해주면 된다. @RequestMapping(value="login", method=RequestMethod.POST) public String login(HttpServletRequest request) throws Exception{ CustomUserDetailsImpl user = new CustomUserDetailsImpl(); // 수동으로 권한 설정 List roles = new ArrayList(); roles.add(new SimpleGrantedAuthority("ROLE_USER")); user..
Spring AOP를 활용한 모든 Request에 Log 남기기
Controller에서 RequestMapping된 모든 요청에 로그를 남기고 싶은데, 메소드 하나하나에 로그를 찍는 것은 너무 생산성이 떨어지기에 Spring AOP를 활용하여 로그를 남겼던 방법을 기록합니다. 1. Dependency 추가 org.springframework.boot spring-boot-starter-aop 2. @Aspect 클래스 작성 import java.util.HashMap; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.AfterReturning; import org.aspe..
[Jasypt] Spring Boot 애플리케이션의 프로퍼티 암호화
Jasypt(Java Simplified Encryption) Spring Boot는 Spring Boot 애플리케이션의 속성 소스에 대한 암호화 지원을 제공합니다. Git의 public repository나 외부에 공개 되면 안되는 정보들을 암호화하여 탈취되는 것을 막기 위해 사용합니다. 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는 개발자가 암호화 작동 방식에 대한 깊은 지식..
[Maven] 라이브러리 Dependency 충돌 해결하기(Maven Tree)
Maven은 라이브러리 관리에서 유용한 도구입니다. 그러나 때로는 각 라이브러리가 참조하는 하위 라이브러리 버전이 충돌하는 경우가 있습니다. Maven에서는 각 라이브러리가 서로 다른 버전을 참조하고 있을 때는 maven tree 구조에서 root와 가장 가까운 라이브러리를 선택하여 빌드가 됩니다. Maven Tree 확인하기 Maven Tree를 사용하면 프로젝트에 필요한 다양한 라이브러리와 그들의 의존성 관계를 한눈에 파악할 수 있습니다. mvn dependency:tree 예를 들어, tika 라이브러리와 openhtmltopdf 라이브러리는 모두 pdfbox라이브러리를 참조하지만 각각 버전이 다른 pdfbox를 참조합니다. tika-parsers-standard-package -> pdfbox:2..
[Mybatis] PostgreSQL ilike 구현하기(feat. Criteria 커스텀하기)
Mybatis Generator를 이용하여 만든 Example에는 원하는 연산자가 없을 수 있습니다. Example클래스 내에 Criteria를 커스텀해서 원하는 연산자를 사용하는 방법을 알아보겠습니다. 사실 Generator를 사용하여 만들어지는 Mapper와 xml등은 mybatis-config.xml에 설정되어 있는대로 만들어지는데, 확실한 방법은 원하는 연산자를 사용할 수 있는 Criteria를 만들어주는 plugin을 구현하 것이 추후에 반복적으로 코딩하지 않아도 될 것입니다.(generator할 때 만든 plugin을 통해서 원하는 메소드를 자동으로 생성 할 수 있기 때문) 그러나 이 포스팅에서는 당장 plugin은 만들기 어렵고, 프로젝트 내에서 간단히 해결하고 싶을 때 어떻게 작업했는지 작..
[Spring Security] 두개의 로그인 페이지(Multiple Login Pages)
Spring Boot 프로젝트 진행 중 두개의 로그인 페이지(User, Admin)를 각각 구현해야 하는 이슈가 발생해서 정리하고자 합니다. 1. Maven Dependencies 추가 org.springframework.boot spring-boot-starter-security 2.7.2 org.springframework.boot spring-boot-starter-web 2.7.2 org.springframework.boot spring-boot-starter-test 2.7.2 org.springframework.security spring-security-test 5.7.2 마지막 버전 확인 spring-boot-starter-security spring-boot-starter-web spri..