본문 바로가기

☕Java/Spring43

스프링 국제화(Internationalization, I18N) 스프링 웹 MVC는 국제화를 단순화하도록 지원해 준다. 국제화를 위해서는 LocaleResolver, MessageSource, LocaleChangeInterceptor의 빈 등록이 필요하다. LocaleResolver는 사용자의 로케일을 얻는다. AcceptHeaderLocaleResolver - 요청의 Accept-Language 헤더 상의 로케일을 반환한다. SessionLocaleResolver - 세션에 저장된 로케일을 반환한다. FixedLocaleResolver - 고정된 기본 로케일을 반환한다. MessageSource는 현재 로케일에 맞는 메시지를 가져온다. ResourceBundleMessageSource - 특정 빈 이름으로 자원 번들에 접근하는 MessageSource 구현체 Re.. 2024. 4. 2.
스프링 시큐리티로 CSRF 방지 설정하기 CSRF 공격이란? CSRF(Cross Site Request Forgery) 공격은 사용자가 의도하지 않은 요청을 악용하여 악의적인 행위를 유도하는 기법이다. 웹 애플리케이션은 일반적으로 사용자를 인증하기 위해 세션 쿠키나 인증 토큰을 사용하는데, CSRF 공격자는 이 인증 정보를 이용하여 피해자인 것처럼 요청을 보낸다. 이를 통해 공격자는 피해자의 권한으로 악의적인 동작을 수행할 수 있다. 예를 들어, 피해자가 로그인한 상태에서 공격자가 조작한 링크를 클릭하면, 웹 애플리케이션은 피해자의 인증 정보를 사용하여 공격자가 조작한 요청을 수행한다. 이로써 공격자는 피해자의 계정으로 의도하지 않은 동작을 수행할 수 있게 된다. 스프링 시큐리티에서는 기본적으로 CSRF 방지를 활성화한다. HttpSecurit.. 2024. 3. 17.
스프링 프로젝트에서 service 인터페이스나 serviceImpl 클래스를 사용하는 이유와 사용해야 하는지 여부 Do I need an interface with Spring boot? In this blog post, we discover whether we have to use an interface when writing services with Spring boot. dimitri.codes 항상 서비스 인터페이스와 구체 클래스를 만들어 다른 클래스에 주입해야 한다고 묻는다면, 답은 X이다. 서비스 클래스를 교체해야 하는 경우가 아니라면 굳이 서비스 인터페이스를 만들어서 사용할 필요가 없다. 과거에는 스프링이 JDK Dynamic proxy를 사용해서 프록시를 생성하려면 인터페이스가 필요했지만 최근 버전의 스프링 프레임워크들은 CGLIB 프록시를 지원하고 권장하기 때문에 인터페이스가 필요하지 않다. 이런 이.. 2022. 11. 26.
생성자 주입을 권장하는 이유 스프링의 의존성 주입 방식에는 수정자(setter) 주입, 필드(field) 주입, 생성자(constructor) 주입이 있다. 그중에서 생성자 주입이 다른 방식보다 권장된다. 그 이유들을 간단히 살펴보자. 객체를 불변(immutable)으로 만들 수 있다. setter를 사용하는 주입은 실행 중 언제든지 객체를 변경할 수 있지만, 생성자 주입은 객체를 final로 선언할 수 있어 처음 주입된 이후 변경이 불가능하다. 애플리케이션 실행 시 의존성을 반드시 주입하여 NullPointerException을 방지한다. 컴파일 시에 어떤 이유에서든 의존성이 주입되지 않는 경우를 막아서 실행 중에 NPE를 막을 수 있다. 순환 참조를 막아준다. 한 객체가 다른 객체를 서로 참조할 경우 stack overflow의.. 2022. 5. 30.
728x90