본문 바로가기
728x90
반응형

Spring31

Spring Security 5에서 Spring Security 6으로 변경 (URL-권한 인가) Overview스프링 부트 3.0부터 스프링 시큐리티 6 버전이 적용되었습니다. 삭제되거나 deprecated된 코드가 많아서 마이그레이션 시 주의할 부분에 대해 알려드리겠습니다.기존 버전 : 5.3.3.RELEASE최신 버전 : 6.2.4 Summary기존 WebSecurityConfigurationAdapter를 상속받아 세팅하던 방식은 삭제되었고 SecurityFilterChain bean을 스프링 컨테이너에 등록해줘야함.authorizeRequests() → authorizeHttpRequests()로 변경antMatchers() → requestMatchers()로 변경로그인 페이지 리다이렉트 반복 접근 이슈 발생 시.dispatcherTypeMatchers(DispatcherType.FORWA.. 2024. 4. 30.
[WebFlux] Mono에 담긴 List를 하나로 합치기 Spring WebClient를 통해 동일한 객체타입을 리턴하는 여러 외부 API를 호출하면서 Mono를 List로 담았는데, 각 API 호출 응답으로 받은 객체가 List여서 Flux.merge(monoList).collectList() 타입이 Mono이 돼버렸습니다. Mono가 아닌 Mono로 리턴할 수 있는 방법을 알아보겠습니다. 우선 아래 코드를 비교해 확인해 주세요. // AS-IS public Mono getList(...) { List monoList = new ArrayList(); Mono listMono1 = Mono.just(List.of(...)); monoList.add(listMono1); Mono listMono2 = Mono.just(List.of(...)); monoList.. 2023. 7. 13.
[Spring] WebMVC에서 WebFlux 사용 (with WebClient) Spring에는 두 가지 웹 프레임워크가 있습니다. WebMVC : 전통적인 멀티 스레드 기반의 웹 프레임워크 WebFlux : 리액티브 스택 기반의 웹 프레임워크 Spring WebMVC와 WebFlux는 공존할 수 없다고 생각했는데, Spring framework에서 제공하는 Http Client API로 RestTemplate 대신 WebClient를 사용하라고 권고하고 있어서 의문이 생겼습니다. 두 모듈의 공존이 가능한 것인가? Spring 문서를 확인해보면 "애플리케이션은 하나 또는 다른 모듈을 사용하거나 경우에 따라 두 모듈을 모두 사용할 수 있습니다(예: 반응형 WebClient가 포함된 Spring MVC 컨트롤러)."라고 써져 있습니다. 실제로 spring-boot-starter-web,.. 2023. 7. 13.
[Spring] RestTemplate Deprecated의 진실 Spring framework에서 제공하는 Http Client API로 RestTemplate이 있습니다. 그런데 인터넷에서 RestTemplate이 Deprecated 된다는 얘기를 종종 볼 수 있습니다. 하지만 최근 문서에서는 WebClient 사용을 권고하는 말 뿐, RestTemplate을 Deprecated 한다는 말은 없습니다. 그럼 왜 RestTemplate이 Deprecated된다는 소문이 퍼진 걸까요? 확인해 보니 spring 5.2.1.RELEASE 버전 문서에 RestTemplate가 Deprecated 될 예정이라고 써져 있었습니다. 이 문서가 소문의 근원지가 아닐까 싶습니다. 그런데 spring github issue에도 다음과 같은 글이 올라와있습니다. "향후 사용 중단 가능성.. 2023. 7. 13.
[Spring] @Transactional 과 UnexpectedRollbackException org.springframework.transaction.UnexpectedRollbackException: Transaction silently rolled back because it has been marked as rollback-only 아래 코드와 같이 예외가 발생했더라도 트랜잭션이 시작된 메서드에서 예외를 잡았으니 롤백 없이 커밋되고 정상적으로 값을 리턴할 것이라고 생각하였습니다. @Service public class AccountService { @Resource private HistoryService historyService; @Transactional public UserDetails signUp(UserVO param) { // ... try { historyService.add.. 2023. 2. 1.
[webFlux] SwitchIfEmpty가 항상 호출되는 이슈 해결 (Lazy Evaluation) webflux에서 if else문으로 switchIfEmpty를 주로 사용하는데, empty가 아닌 경우에도 switchIfEmpty를 항상 호출합니다. 왜 그러는 것인지, 어떻게 하면 호출을 안 하게 할 수 있는지 알아보겠습니다. 1: String str = "str"; 2: Mono.just(str) 3: .map(s -> { 4: System.out.println(s); 5: return s; 6: }) 7: .switchIfEmpty({ 8: System.out.println("defaultStr"); 9: return Mono.just("default"); 10: }) 11: .subscribe(); 위 코드를 보면 str이 비어 있지 않으니 문자열 "str"만 출력할 것이라고 생각하겠지만, 실.. 2022. 12. 20.
[Spring5] 쿠키와 파라미터로 Locale 처리(CustomCookieLocaleResolver, LocaleChangeInterceptor) Cookie를 이용하여 Locale을 정의하는 CookieLocaleResolver과 언어 파라미터에 따라 Locale을 변경해주는 LocaleChangeInterceptor에 대해 포스팅하겠습니다.  CookieLocaleResolver CookieLocaleResolver는 말 그대로 Cookie를 이용해서 Locale 정보를 담는 것입니다. setLocale()을 통해 Locale 정보를 담은 Cookie를 생성하고 resolverLocale()에서 Cookie로 부터 Locale 정보를 가지고 옵니다. import org.springframework.web.servlet.i18n.CookieLocaleResolver; @Bean public LocaleResolver locale.. 2022. 9. 8.
Spring에서 LDAP 사용하기 (계정 CRUD, 인증, 비밀번호 변경) LDAP 디렉터리 서버는 읽기에 최적화된 계층적 데이터 저장소입니다. 일반적으로 계정 인증 및 권한 부여에 필요한 계정 관련 정보를 저장하는 데 사용됩니다.이전 게시물에서는 AD와 LDAP을 비교하면서 LDAP 구조에 대해 알아봤는데, 이번에는 스프링에서 계정 인증 및 검색하고 디렉터리 서버에서 계정 생성 및 수정하기 위한 Spring LDAP API 사용법을 알아보겠습니다.  Maven Dependency org.springframework.ldap spring-ldap-core ...해당 dependency의 버전은 https://search.maven.org/search?q=a:spring-ldap-core 에서 확인 가능합니다.  LDAP 데이터계정 인증, 검색, 생성, 수정을 위.. 2022. 8. 4.
[Spring] RequestContextHolder로 HttpServletRequest 가져오기 HttpServletRequest를 메서드 파라미터로 선언하지 않고 가져오는 방법입니다. request를 서비스 레이어까지 전달하지 않더라도 RequestContextHolder를 이용하면 되는데, RequestContextHolder는 Spring 프레임워크 전 구간에서 HttpServletRequest에 접근할 수 있게 도와주는 구현체입니다. RequestContextHolder는 ThreadLocal을 사용해서 servlet이 호출되면 thread, HttpServletRequest를 key-value로 보관하고 있다가 요청을 하면 동일한 thread내에서는 어느 곳에서든 같은 HttpServletRequest를 돌려주는 역할을 합니다. RequestContextHolder에는 HttpServlet.. 2022. 7. 21.
[Spring/Jenkins] 젠킨스 Rest API로 젠킨스 Job 실행 젠킨스 Rest API를 이용하여 젠킨스 Job을 실행하는 방법을 알아보겠습니다. 1. 젠킨스 계정 API Token 생성 계정 > 설정 > API Token > Add new Token 원하는 이름으로 생성한 뒤 토큰을 복사해주세요. (복사하지 않으면 토큰을 알 수가 없음. 토큰명은 의미 없음.) 2. Item에 Token 추가 view > item > 구성 > 빌드 유발 빌드를 원격으로 유발 (예: 스크립트 사용)을 체크한 뒤 복사한 토큰을 붙여 넣기 해주세요. 3. curl로 job 실행 테스트 curl -X POST [젠킨스 서버 URL]/job/[job 이름]/buildWithParameters --user [젠킨스 user id]:[user password] --data token=[생성한 j.. 2022. 7. 4.
728x90
반응형