SpringSecurity 미션 #1

텐저린티·2023년 8월 2일
0

데브코스

목록 보기
35/41
post-thumbnail

기본 로그인 계정 추가

@Bean
UserDetailsService userDetailsService(PasswordEncoder passwordEncoder) {
    InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
    manager.createUser(User
            .withUsername("user")
            .password(passwordEncoder.encode("user123"))
            .roles("USER")
            .build());
    manager.createUser(User
            .withUsername("admin")
            .password(passwordEncoder.encode("admin123"))
            .roles("ADMIN")
            .build());
    return manager;
}

비밀번호 암호화

  • Spring Security 5 부터 DelegatingPasswordEncoder 클래스가 기본 PasswordEncoder.
  • DelegatingPasswordEncoder 클래스 안에 비밀번호 해시 알고리즘 별로 Map에 저장
    • bcrypt, noop, sha256, etc
    • 해시 알고리즘 별 PasswordEncoder 선택 위해 패스워드 앞에 prefix 추가
      • {bcrypt}....
      • {noop}password
      • {pbkdf2}...
      • {sha256}...
    • prefix 생략되는 경우 기본값 bcrypt 인코더 선택
  • DelegatingPasswordEncoder 말고 세부 PasswordEncoderBean으로 등록해도 됨.
    • BcryptPasswordEncoderBean으로 등록
  • password 업그레이드
    • 비밀번호 해시 알고리즘 변경 시 강력한 해시 알고리즘으로 업그레이드
    • InMemoryUserDetailsManager 객체 사용 시 로그인 최초 1회 성공 시 {noop} 에서 {bcrypt}로 encoder 업그레이드
@Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }

로그아웃 기능 설정

  • LogoutFilter
  • SecurityFilterChain 에 필터 추가
HttpSecurity http;
http.logout(logout -> logout
        .logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
        .logoutSuccessUrl("/")
        .invalidateHttpSession(true)
        .clearAuthentication(true)
        .deleteCookies("remember-me"))

쿠키 기반 자동 로그인

  • RememberMeAuthenticationFilter
  • SecurityFilterChain 에 필터 추가
HttpSecurity http;
http.rememberMe(remember -> remember
        .rememberMeCookieName("remember-me")
        .rememberMeParameter("remember-me")
        .tokenValiditySeconds(300)
        .alwaysRemember(false))
profile
개발하고 말테야

0개의 댓글

관련 채용 정보