본문 바로가기

Spring/Spring Security11

[Spring Security] 요청 캐시 흐름 정리 해당 동작을 하는 모든 필터들은 FilterChainProxy에 있는 필터들에서 동작 1. 인증되지 않은 사용자가 리소스 요청사용자가 인증이 필요한 리소스에 접근하려 하면, Spring Security는 이 요청을 가로채 인증 여부를 확인2. 인증되지 않은 경우, 예외 처리인증되지 않은 경우, ExceptionTranslationFilter에서 예외를 처리이때 AccessDeniedException이나 AuthenticationException을 던지게된다.AccessDeniedException은 인증은 했지만 권한이 부족한 경우AuthenticationException은 인증이 필요한 경우 RequestCache 인터페이스의 구현체(HttpSessionRequestCache가 일반적)에서 요청 정보를 .. 2024. 9. 13.
[Spring Security] 로그인 사용자 정보 가져오기 @AuthenticationPrincipalSpring Security에서 사용되는 어노테이션이 어노테이션은 주로 컨트롤러 메서드의 인자로 사용현재 로그인한 사용자의 정보를 쉽게 접근할 수 있도록 해준다.  @AuthenticationPrincipal을 사용하면 Spring Security는 자동으로 인증된 사용자의 Principal 객체를 메서드 파라미터에 주입이 Principal 객체는 일반적으로 사용자명이나 사용자 ID와 같은 정보가 포함된 UserDetails 객체 사용 방법 UserPrincipal(UserDetails(인터페이스) - 구현체(User) - 상속(UserPrincipal) 커스텀 클래스 public class UserPrincipal extends User { private.. 2024. 9. 3.
[Spring Security] 핸들러(예외) 처리 [400] AuthenticationFailureHandler (인증 실패 핸들러: 로그인 실패 핸드러) @Slf4j@RequiredArgsConstructorpublic class LoginFailHandler implements AuthenticationFailureHandler { private final ObjectMapper objectMapper; @Override public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException exception) throws IOException, ServletException { lo.. 2024. 9. 2.
[Spring Security] ROLE VS AUTHORITY 스프링 시큐리티에서 역할과 권한 두 개념은 유사하지만 서로 다른 목적과 용도로 사용된다.   역할 (Role)역할은 사용자가 수행할 수 있는 기능이나 책임을 그룹화하는 상위 개념 보통 여러 권한을 포함하는 큰 단위예) "ADMIN", "USER", "MANAGER" 권한 (Authority)특정 작업이나 자원에 대한 접근 권한을 정의하는 더 세분화된 개념, 권한은 구체적이며, 특정 작업이나 리소스에 대한 허가를 나타낸다. 예) "READ_PRIVILEGE", "WRITE_PRIVILEGE", "DELETE_PRIVILEGE" / 데이터 읽기 권한  스프링 시큐리티에서 역할과 권한 설정하기 UserPrincipal: UserDetailsService 반환 객체 (UserDetails 구현체) https:/.. 2024. 9. 2.
[Spring Security] UserDetailsService 로그인 ~ 세션 생성 회원가입을 하고 유저의 정보를 DB에 저장하고 스프링 시큐리티를 통해 로그인을 했을 때어떤 방식으로 DB에서 유저 정보를 조회하고 활용할까?  1. 로그인 요청사용자가 로그인 폼에 사용자 이름과 암호를 입력하고 제출 2. UserDetailsService 호출SpringSecurity는 UserDetailsService의 loadUserByUsername 메서드를 호출하여 사용자 이름을 기반으로 사용자의 UserDetails 객체를 조회한다. public interface UserDetailsService { UserDetails loadUserByUsername(String username) throws UsernameNotFoundException;}@Beanpublic User.. 2024. 9. 2.
[Spring Security] Remember Me 설정 코드 @Beanpublic SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception{ return http .authorizeHttpRequests( authorize -> authorize .requestMatchers("/auth/login").permitAll() .anyRequest().authenticated()) .csrf(AbstractHttpConfigurer::disable) .formLogin(login -> login .. 2024. 9. 2.