본문 바로가기

스프링29

[Java] Jasypt 알아보기 🙋 들어가며 프로젝트를 진행할 때 보안에 예민해서 노출시키지 않는 값들이 있습니다. 여러 방법으로 노출시키지 않는 방법이 있지만 그중에 Jasypt라는 라이브러리가 존재합니다. 오늘은 어떻게 사용하는지 가볍게 알아보겠습니다. 😋 🔐 Jasypt란? Jasypt는 Java Simplified Encryption의 약자입니다. 공식 문서에 따르면 다음과 같이 설명되어 있습니다. 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 wor.. 2023. 10. 21.
[Security] 시큐리티 파헤치기 (3) : 시큐리티 초기화, 다중 필터 체인 🙋 들어가며 이번 글에서는 시큐리티가 어떻게 초기화되고 어떤 값들이 생성되는지 알아보겠습니다. 시큐리티는 여러 개의 필터 체인을 관리할 수 있는데 어떻게 설정하는지 알아보겠습니다. 그리고 요청이 어떻게 알맞은 필터 체인에 타고 흐르는지도 알아보겠습니다. 📁 설정 파일 작성 (feat. Security 6) 시큐리티를 사용하기 위해서는 우선 설정 파일을 작성해야 합니다. 다음과 같이 단 어노테이션 하나만 달아주면 기본적인 시큐리티 설정이 완료됩니다. @Configuration @EnableWebSecurity // 기본 시큐리티 설정 public class SecurityConfig { } 바로 @EnableWebSecurity 입니다. 전혀 복잡하지 않죠? 😋 단순히 달아주기만 하면 애플리케이션이 메모리.. 2023. 8. 11.
[Security] 시큐리티 파헤치기 (2) : RequestCacheAwareFilter, RequestCache 🙋 들어가며 스프링 시큐리티 필터에는 다양한 필터들이 존재합니다. 오늘은 그중에서 인증, 인가를 위해서 가로채진 요청을 어떻게 다시 수행하는지 알아보겠습니다. ↩️ RequestCacheAwareFilter 이름에서 어떤 역할을 하는지 대략적으로 알 수 있습니다. 대충 요청에 대한 캐시를 알고 있는 필터 같습니다. 동작을 이해하기 위해서는 내부적으로 무엇을 가지고 있는지 알아야 합니다. 🏛️ 시큐리티 아키텍처 시큐리티는 결국 인증과 인가를 위한 프레임워크입니다. 인증을 위한 Authentication Manager와 인가를 위한 Access Decision Manager가 핵심입니다. 요청한 자원이 인증이 필요하다면 요청을 가로채 인증한 뒤 다시 원래 요청으로 되돌아가야 합니다. 시큐리티는 Reques.. 2023. 8. 2.
[Spring] 트랜잭션 사용 조심하기 😇 들어가기 앞서 로그인 실패 시 핸들링을 구현하면서 발생했던 트랜잭션으로 발생했던 이슈가 있어서 공유하고자 합니다. 트랜잭션에 대해서 추가적인 내용들은 따로 정리를 할 예정입니다. 🙋 트랜잭션이란? 하나의 작업의 단위를 트랜잭션이라고 합니다. 스프링에서는 트랜잭션을 편하게 사용할 수 있도록 AOP와 어노테이션 기반으로 동작합니다. 우리가 꼭 짚고 넘어가야 것은 트랜잭션은 기본적으로 상위 트랜잭션에 포함된다 입니다. 1️⃣ 로그인 실패 로그인 실패 핸들링은 다음과 같은 요구사항을 가집니다. 로그인 실패 시 로그인 실패 회수를 카운팅한다. 카운팅한 결과를 예외에 담아서 던진다. 코드는 다음과 같이 작성했습니다. 인증을 진행하다가 BadCredentialsException가 발생하면 핸들링 로직을 실행합니다.. 2023. 5. 29.
TIL : Bean 컨테이너와 ComponentScan (22) 🎛️ ApplicationContext 스프링에서 핵심인 ApplicationContext는 Bean을 관리해준다. 싱글톤 레파지토리로도 불리는데 Bean을 싱글톤으로 관리해주기 때문이다. 우리가 작성한 설정 정보를 적용시키려면 @Configuration을 붙여준다. 여기에 싱글톤의 비밀이 들어있다. 설정 정보는 우리가 작성한 순수 자바 클래스가 빈으로 등록되는 것이 아니다. 작성한 자바 클래스를 상속받는 임의의 다른 클래스를 만들고 빈으로 등록한다. 여기서는 CGLIB라는 바이트코드 조작 라이브러리를 사용한다. CGLIB 라이브러리가 내부적으로 어떻게 구현되었는지는 모르겠지만, 빈이 존재하면 기존 인스턴스를 반환하고 아니라면 생성할 수 있도록하는 클래스로 변환될 것이다. 따라서 @Configuratio.. 2023. 5. 17.
[Spring] @ModelAttribute 🌞 들어가기 앞서 스프링에서 요청한 파라미터를 바인딩하는 방법은 여러 가지 있다. 오늘은 그중에서 @ModelAttribute에 대해서 이야기해 볼 생각이다. 사용은 쉽지만 주의할 점이 있기 때문에 어떻게 동작하는지와 같이 주의점도 정리해 보겠다. 😋😋 🪄 @ModelAttribute란? 파라미터를 바인딩하는 여러 어노테이션 중에 모델 객체를 바인딩하는 어노테이션이다. 다음과 같은 모델 객체(혹은 DTO)가 존재할 때 정보를 받아오는 방법은 여러 가지가 있겠지만 이 글에서는 @RequestParam과 @ModelAttribute를 비교해서 사용법을 알아보겠다! 가볍게 참고만 하자 ㅎㅎ.. // 모델 객체 public class User { private String name; private int age.. 2023. 4. 19.