문: Spring Security
시: 스프링 심화강의 Spring Security
개론을 들었다.
해: 단순히 멍때리면서 클론코딩 하는 것이 아니라, 개념적인 부분들을 이해하기 위해 필기하며 열심히! 들었다.
알: Spring Security
의 매커니즘, 개념들에 대해 알게 되었다.(아래에서 자세히 기술)
Spring Security
오늘도 어김없이 등장하는
보안 글씨체
와 함께 강의를 정리하며 이해해보았다.
- ⚠️주의⚠️ 글씨체가 매우 더러우니 필기 내용을 읽으려하지 마세요! plz🙏
Spring Security
적용 및 활성화 방법.Spring Security는 요청이 들어오면 Servlet FilterChain을 자동으로 구성한 후 거치게 한다.
FilterChain -> 여러 Filter를 chain형태로 묶어놓은 것
- FilterChain을 차근차근 타고 넘어갈 때,
filterchain.doFilter(request, response)
를 통해 request와 response를 챙겨서 다음 단계로 넘어갈 수 있다.- 만약 Exception이 발생하면, FilterChain을 역순으로 타고 올라간다.
SecurityContextHolder 에는 스프링 시큐리티로 인증을 한 사용자의 상세 정보를 저장한다.
Authication
에 상세정보를 담고,SecurityContext
에 담은 뒤에SecurityContextHolder
라는 포장지로 감싼다.
SecurityContext context = SecurityContextHolder.createEmptyContext();
Authentication authentication = new UsernamePasswordAuthenticationToken(principal, credentials, authorities);
context.setAuthentication(authentication);
SecurityContextHolder.setContext(context);
@Configuration
@EnableWebSecurity // 스프링 Security 지원을 가능하게 함
public class WebSecurityConfig {
@Bean
public WebSecurityCustomizer webSecurityCustomizer() {
// h2-console 사용 및 resources 접근 허용 설정
return (web) -> web.ignoring()
.requestMatchers(PathRequest.toH2Console())
.requestMatchers(PathRequest.toStaticResources().atCommonLocations());
}
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
// CSRF 설정
http.csrf().disable();
http.authorizeRequests().anyRequest().authenticated();
// Custom 로그인 페이지 사용
http.formLogin().loginPage("/api/user/login-page").permitAll();
return http.build();
}
}
WebSecurityCustomizer()
SecurityFilterChain
보다 먼저 실행되는 커스텀필터http.authorizeRequests().antMatchers(HTTP메소드, URI)
를 활용하여 .PermitAll()
, authenticated()
등등 설정 가능http.formLogin().loginPage("/api/user/login-page").permitAll();
를 통해 커스텀 로그인 페이지를 사용할 수 있다.http.formLogin()
으로만 설정해두면 기본 로그인페이지를 만날 수 있다. UserDetails, UserDetailsService
인터페이스를 상속받아 @Override
하는 방식으로 Custom할 수 있다. UserDetails
-> Entity, Dto 역할 /UserDetailsService
-> 서비스 역할이라는 점을 기억하면 이해에 도움이 된다.
보안글씨체 보러 왔읍니다.... 치유 되었읍니다...