전체 보기
🍀

SpringSecurity6, dto의 어노테이션(requestBody 동작원리)

작성일자
2023/07/21
태그
DIARY_DEVELOP
프로젝트
FIS
책 종류
1 more property

dto 어노테이션

dto에 불필요한 어노테이션과 꼭 필요한 어노테이션에 대해 고민하며 requestBody의 동작 원리까지 공부해볼 수 있었다. 결론은 아래와 같다.
responseDto → @builder,  @getter
getter없고 builder만 넣었을 때
에러
getter가 꼭 필요함!
requestDto → @NoArgsConstructor@Getter
noArgsConstructor 다들 필요하다는데,,,
실제로 필요한 dto도 있었고, 없어도 문제 없이 동작하는 dto도 있었다.
이에 대한 분석은 꼭 TODO로 남겨두자.

스프링 부트 3.0 이상 Spring Security 6 사용

SecurityFilterChain을 Bean으로 등록해서 사용하는 방식으로 바뀐 건 진즉 알고 있었는데, 특이하게,,, 람다를 사용하게 바꼈다,,, 흠… 일단 람다로 쓰니 전부 작동하고 공식문서에서도 람다를 사용하는 예시가 보이는데 좀 더 확인해봐야겠다. 일단 아래와 같이 설정하면 잘 동작하니 참고 정도는 하면 좋을 거 같다. Spring Security 6 설정에 대해
@RequiredArgsConstructor @Configuration @EnableWebSecurity public class WebSecurityConfig { private final CustomAccessDeniedHandler customAccessDeniedHandler; private final CustomAuthenticationEntryPoint customAuthenticationEntryPoint; private final AuthenticationConfiguration authenticationConfiguration; private final UserRepository userRepository; private final JwtTokenProvider jwtTokenProvider; @Bean public BCryptPasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(8); } @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http .csrf(csrf -> csrf.disable()) // csrf 보안 토큰 사용 x .httpBasic(httpBasic -> httpBasic.disable()) // 매 요청마다 id, pwd 보내는 방식 사용 x .formLogin(formLogin -> formLogin.disable()) // formLogin 사용 x .sessionManagement(sessionManagement -> sessionManagement .sessionCreationPolicy(SessionCreationPolicy.STATELESS)) // 세션 사용 x .cors(cors -> cors.configurationSource(corsConfigurationSource())) .exceptionHandling(exceptionHandling -> exceptionHandling.authenticationEntryPoint(customAuthenticationEntryPoint)) .exceptionHandling(exceptionHandling -> exceptionHandling.accessDeniedHandler(customAccessDeniedHandler)) .addFilter(jwtAuthorizationFilter()) .addFilterBefore(jwtExceptionFilter(), JwtAuthorizationFilter.class) .authorizeRequests(authorizeRequests -> authorizeRequests.expressionHandler(expressionHandler())) .authorizeRequests(authorize -> authorize .requestMatchers("/api/v1/auth/**").permitAll() .anyRequest().hasRole("TEACHER") ); return http.build(); } @Bean public CorsConfigurationSource corsConfigurationSource() { CorsConfiguration config = new CorsConfiguration(); config.addAllowedOrigin("http://localhost:3000"); config.addAllowedHeader("*"); config.addAllowedMethod("*"); config.setAllowCredentials(true); UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); source.registerCorsConfiguration("/**", config); return source; } @Bean public AuthenticationManager authenticationManager() throws Exception { return authenticationConfiguration.getAuthenticationManager(); } @Bean public JwtAuthorizationFilter jwtAuthorizationFilter() throws Exception { return new JwtAuthorizationFilter(authenticationManager(), userRepository, jwtTokenProvider); } @Bean public JwtExceptionFilter jwtExceptionFilter() { return new JwtExceptionFilter(); } @Bean public RoleHierarchyImpl roleHierarchy() { RoleHierarchyImpl roleHierarchy = new RoleHierarchyImpl(); roleHierarchy.setHierarchy("ROLE_DIRECTOR > ROLE_TEACHER"); return roleHierarchy; } @Bean public DefaultWebSecurityExpressionHandler expressionHandler() { DefaultWebSecurityExpressionHandler expressionHandler = new DefaultWebSecurityExpressionHandler(); expressionHandler.setRoleHierarchy(roleHierarchy()); return expressionHandler; } }
Java
복사

Intellij 한글 로그 깨짐 해결

한글 패치 깔아서 해결했음