Spring Security 26

[SpringBoot 2.X.X] No beans of 'AuthenticationManager' type found.

개요 Spring Security를 적용하는데 아래와 같은 메시지와 함께 에러가 발생했습니다. Could not autowire. No beans of 'AuthenticationManager' type found. 원인 release note에 따르면 1점대 버전에서는 별도 처리 없이 SpringBoot에서 제공하는 AuthenticationManager를 주입시킬 수 있었지만 2점대 버전부터는 WebSecurityConfigurerAdapter를 상속받는 클래스에서 authenticationmanagerBean() 메서드를 오버라이드 해야 autowire가 가능했습니다. 자세한 내용은 아래 링크로 첨부합니다. https://github.com/spring-projects/spring-boot/wiki..

[DEV] 기록 2022.10.20

[SpringBoot] Prometheus 연동시 "INVALID" is not a valid start token

개요 Spring Security가 적용된 프로젝트에서 actuator를 적용하고 프로메테우스와 연동했을 때 아래와 같은 오류 메시지와 함께 State가 DOWN인 것을 확인했습니다. "INVALID" is not a valid start token 원인 Spring Security가 적용되어 endpoint를 접근할 수 없어 발생하는 문제였습니다. 해결 방법 actuator가 endpoint에 접근할 수 있도록 actuator 관련 url에 대해서는 Spring Security가 적용되지 않도록 처리해주면 해결이 됩니다. @Override public void configure(WebSecurity web) throws Exception { web.ignoring() .antMatchers("/actu..

[DEV] 기록 2022.08.31

[SpringBoot] 로그인된 사용자가 접근할 수 있는 기능 Test 작성하는 방법

개요 로그인된 사용자를 대상으로 하는 Controller 테스트를 작성할 때 저는 @BeforeEach 어노테이션을 통해 form 로그인을 먼저 진행하고 @WithUserDetails의 setUpBefore를 TEST_EXECUTION으로 설정하여 @BeforeEach 어노테이션이 호출된 뒤 테스트를 진행하도록 구현했습니다. 하지만, 테스트는 제가 원했던 순서와 달리 @WithUserDetails 어노테이션이 붙어있는 테스트가 @BeforeEach가 먼저 실행되어 에러가 발생했습니다. 찾아본 결과 이는 JUnit5 Spring Security 버그이며 현재 2022.04.02 기준으로도 아직 해결이 되지 않은 상태입니다. 따라서, 저는 커스텀 어노테이션과 @WithSecurityContext 어노테이션 ..

Spring 2022.04.02

[Spring Security] Remember-me를 통해 로그인 유지하기

개요Spring Security를 통해 로그인한 뒤 브라우저 쿠키를 확인해보면 JSESSIONID가 있는 것을 확인할 수 있습니다.JSessionID는 Tomcat 컨테이너에서 세션을 유지하기 위해 발급한 키이며 HTTP 프로토콜은 기본적으로 stateless이기 때문에 상태를 저장하기 위해 Tomcat이 JSESSIONID 쿠키를 클라이언트에 발급한 것이며 해당 쿠키를 통해 세션을 유지합니다.세션이 만료될 경우 쿠키 내 JSESSIONID가 사라지면서 로그인이 풀리게 되는데 세션이 만료되더라도 로그인을 유지하고 싶다면 Spring Security에서 제공해주는 Remember-me 쿠키를 사용해야 합니다.이번 게시글에서는 Remember-me에 대해 간단하게 알아보겠습니다. * 쿠키, 세션에 대한 개념..

[Spring Security] @AuthenticationPrincipal

개요로그인한 사용자의 정보를 매개변수로 전달받을 방법을 고민하던 중 편리하게 사용할 수 있는 어노테이션이 있어 간단히 정리하고자 합니다.이 내용은 대부분 엔꾸꾸님이 정리하신 내용과 동일하므로 엔꾸꾸님 블로그를 참고하시는 것을 추천합니다. 1. @AuthenticationPrincipal 어노테이션 없이 로그인한 사용자의 정보를 불러오는 방법해당 어노테이션을 사용하기 전에는 Principal 객체를 통해 로그인한 사용자를 받아올 수 있지만 이는 SecurityContextHolder 내 Principal(SecurityContextHolder.getContext().getAuthentication().getPrincipal())과는 달리 Java 표준 Principal 객체이므로 name 정보밖에 불러오지..

[SpringBoot] There is no PasswordEncoder mapped for the id "null"

[개요] Spring Security를 공부하면서 권한 설정 코드를 작성한 뒤 테스트를 하는데 아래와 같은 오류 메시지가 발생했습니다. 에러 발생 이유 Spring Security 버전 5 이상부터는 PasswordEncoder가 변경되었기 때문에 password 앞에 식별자 정보를 넣어야 하는데 식별자 정보를 넣지 않아 위와 같은 에러가 발생했습니다. [출처] stackoverflow.com/questions/49654143/spring-security-5-there-is-no-passwordencoder-mapped-for-the-id-null 해결 방법 password 형식을 "{noop}패스워드"와 같은 형식으로 생성해주면 위 문제는 해결이 됩니다. 즉, 비밀번호가 1111이라면 형식을 맞추기 위..

[DEV] 기록 2020.12.15