Spring Security
- Spring Security
- 인증과 권한 제어에 필요한 필터 모음
- 필터를 기반으로 권한에 따른 접근 제어 기능, 패스워드 암호화 등 전반적인 기능 포함함
인증
- Authentication
- 입력받은 정보와 사용자 정보를 비교해서 신원을 확인하는 것
- AuthenticationManager, Authentication의 인터페이스와 클래스 존재
- Spring Security는 기본적으로 HTTP 기본 인증 방식으로 동작
- DB에 저장된 사용자 정보와 인증을 연동하기 위해서는 AuthenticationManager 설정 필요
인가
- Authorization
- 인증과정을 통해서 사용자를 식별한 후 사용자가 가진권한을 확인하여 해당 사용자 권한에 맞게 접근을 허용하는 것
- Spring Security는 Role 기반으로 권한 관리를 함
- Role
- 접속한 사용자가 사이트에서 수행하는 역할
- Role에 따라 페이지 접근 허용 여부를 결정함
인증 흐름
- 사용자가 처음 사이트에 접속
- 인증 정보가 필요한 화면은 Spring Security의 인증을 통과한 후에 접근 가능
- 인증 정보는 DB에서 가져옴
- 인증에 실패 시 다시 로그인 페이지
- 로그인 후 로그아웃 시 권한이 필요없는 첫 페이지
회원 가입
접근 경로 설정
SecurityConfig 설정
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
//접근 허용
.antMatchers("/css/**", "/js/**", "/images/**", "/resources/**", "/h2-console/**", "/webjars/**", "/signup", "/home", "/").permitAll()
.anyRequest().authenticated()
.and()
//iframe 허용
.headers().
frameOptions().disable()
.and()
//DB 어드민 접속 허용
.csrf()
.ignoringAntMatchers("/h2-console/**")
.and()
//로그인
.formLogin()
.loginPage("/login")
.loginProcessingUrl("/sign-in")
.defaultSuccessUrl("/welcome")
.failureUrl("/login?error")
.usernameParameter("email")
.passwordParameter("passwd")
.permitAll()
.and()
//예외처리
.exceptionHandling().accessDeniedHandler(MemberAccessDeniedHandler())
.and()
.rememberMe()
.key("jpub")
.rememberMeParameter("remember-me")
.rememberMeCookieName("jpubcookie")
.tokenValiditySeconds(86400) //1day
.tokenRepository(rememberMeTokenService()).userDetailsService(myUserService())
.and()
//로그아웃
.logout()
.invalidateHttpSession(true)
.clearAuthentication(true)
.logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
.logoutSuccessUrl("/login?logout")
.permitAll();
}
- 각 설정마다
.and()
로 연결한다. -
antMatchers
- 접근 제어를 하지 않을 경로들을 입력
- 경로 전체에 적용하려면 ‘/**‘를 사용
-
.headers().frameOptions().disable().and().csrf().ignoringAntMatchers("/h2-console/**")
- Spring Security 사용 시 h2-console을 사용할 수 있도록 하는 설정
-
.formLogin() ~ .permitAll()
- 로그인 설정
MemberService 작성
-
bCryptPasswordEncoder
- Spring Security에서 제공하는 단방향 암호화 클래스
- 이를 이용하여 DB에 저장하기 직전에 인코딩하여 저장한다.
-
token validation
- Spring Security에서는 CSRF 공격방지를 위해서 token validation을 제공
토큰 사용
Remember Me
- Remember Me
- Spring Security에서 제공하는 기능
- 인증 정보를 쿠키 형태로 보고나해서 만료 기간 전까지 저장된 쿠키 정보로 인증을 대신 처리해 주는 기능