개요인터넷을 돌아다니던 도중.. 리스트에 단일한 객체만 들어가는 경우 Collection.singletonList() 를 사용하는 것이 좋다는 글을 보았다.테스트 코드인 경우 유용함 - 실 비즈니스 로직엔 싱글톤보단 단순 리스트 사용하는 게 확장에 유리하기에.. 실제로 GPT 도 싱글톤 리스트를 추천하는 것을 보았다.왜 싱글톤 리스트를 단일값인 경우 사용하는 거지?일단 장점이 몇가지 있다.불변성Collections.singletonList 는 불변 리스트를 생성한다.해당 리스트는 단 하나의 요소만 포함되고, 생성 후에는 해당 요소를 추가하거나 제거할 수 없다!메모리 효율사실 정말 미미한 정도라 의미가 있나 싶지만…테스트 코드는 최대한 가벼워야한다고 생각한다!내부적으로 단일 요소만을 저장하기에, 메모리 사..
Spring Security 5.7.11 기준이다.스프링 시큐리티에는 컨트롤러에 역할(Role) 기반 접근 제한을 설정하는 방법에 여러 가지가 있는데,가장 일반적인 방법으로는 @PreAuthorize 또는 @Secured 어노테이션을 사용하는 것이다.해당 어노테이션은 메서드 수준의 보안이 가능하다.@PreAuthorize특정 역할을 가진 사용 역할을 가진 사용자만 메서드를 호출할 수 있도록 제한할 수 있다.@Controller public class SomeController { @PreAuthorize("hasRole('ROLE_ADMIN')") @RequestMapping("/adminOnly") public String adminOnly() { // 관리자만 접근 가능한 로직 return "admi..
개요@MockMember 어노테이션의 경우 테스트 환경에서 시큐리티에서 인증된 사용자의 모의(Mock) 하기 위해서 사용된다.일반적인 경우에는 @WithMockUser 등의 사용자 모킹을 하면 되겠지만..나는 @WithMockUser 가 사용을 해도 일단 인증을 받아 올 수가 없었다.그래서 검색하던 중에 발견한 것이 별도의 커스텀 어노테이션을 통하여 SecurityContext 안의 보안 객체를 커스텀하게 테스트코드에서만 채우는 방법이 있다는 것을 발견했다.어노테이션 코드@Retention(RetentionPolicy.RUNTIME) @WithSecurityContext(factory = MockMemberSecurityContextFactory.class) public @interface MockMem..
Authorize HttpServletRequests with AuthorizationFilter :: Spring SecurityThis version is still in development and is not considered stable yet. For the latest stable version, please use Spring Security 6.2.1!https://docs.spring.io/spring-security/reference/5.7-SNAPSHOT/servlet/authorization/authorize-http-requests.html#page-titleAuthorizationFilter?인증된 요청이 특정 자원에 대한 접근 권한을 가지고 있는지 확인하는 역할임스프링 필터..
JwtAuthenticationFilter 라고UsernamePasswordAuthenticationFilter.class 이전에//로그인전 UserPasswordAuthenticationFilter 를 통해 인증을 받도록 설정 .addFilterBefore(jwtAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class);항상 해당 필터를 거치도록 설정을 하였다.초기@Slf4j public class JwtAuthenticationFilter extends UsernamePasswordAuthenticationFilter { @Autowired private PasswordEncoder passwordEncoder; /** * authenti..
@WithAnonymousUserSpring Security 의 테스트에서 사용된다.테스트 중인 해당 메서드가 익명 사용자 즉, 인증되지 않은 사용자로 접근한 경우를 테스트하고 싶은 경우 사용할 수 있다.@Test @DisplayName("인증되지 않은 사용자가 보호된 경로에 접근하는 경우 401 Unauthorized 응답을 받는다.") @WithAnonymousUser public void When_UnauthorizedUserAccessProtectedPath_Expect401() throws Exception { //when this.mockMvc.perform(get("/v1/api/cart/add")) .andExpect(status().isUnauthorized()); }내부소스@Target..