728x90
반응형
Spring Security의 동작 구조
- Spring Security의 의존성을 추가한 경우 위와 같이 WebSecurityConfigurerAdapter클래스가 실행되게 됩니다.
- WebSecurityConfigurerAdapter클래스는 스프링 시큐리티의 웹 보안 기능의 초기화 및 설정들을 담당하는 내용이 담겨있으며 내부 적으로 getHttp()메서드가 실행될 때 HTTPSecurity 클래스를 생성하게 됩니다.
- 이때의 HTTPSecurity는 인증/인가 API들의 설정을 제공합니다.
//WebSecurityConfigureAdapter.java파일의 일부
protected final HttpSecurity getHttp() throws Exception {
if (this.http != null) {
return this.http;
}
.....
if (!this.disableDefaults) {
applyDefaultConfiguration(this.http); // defualt conf icuration적용
.....
}
configure(this.http);
// 이곳의 configure 메서드를 override하면 우리가 원하는 보안체계를 만들 수 있습니다.
return this.http;
}
// 기본적으로 적용되는 filter들을 포함한 configuration 대한 메서드입니다.
private void applyDefaultConfiguration(HttpSecurity http) throws Exception {
http.csrf();
http.addFilter(new WebAsyncManagerIntegrationFilter());
http.exceptionHandling();
http.headers();
http.sessionManagement();
http.securityContext();
http.requestCache();
http.anonymous();
http.servletApi();
http.apply(new DefaultLoginPageConfigurer<>());
http.logout();
}
- 우리가 인증/인가의 설정을 바꾸고자 한다면 WebSecurityConfigurerAdapter클래스를 상속한 SecurityConfig클래스를 생성하여 configure(HttpSecurity http)메서드를 override하며 설정해야합니다.
//WebSecurityConfigureAdapter.java파일의 일부
protected void configure(HttpSecurity http) throws Exception {
this.logger.debug("Using default configure(HttpSecurity). "
+ "If subclassed this will potentially override subclass configure(HttpSecurity).");
http.authorizeRequests((requests) -> requests.anyRequest().authenticated());
http.formLogin();
http.httpBasic();
}
사용자 정의 보안 기능 구현하기
앞서 말했듯이 우리가 인증/인가의 설정을 바꾸고자 한다면 아래와 같아 WebSecurityConfigurerAdapter를 상속한 SecurityConfig클래스를 생성하여 configure(HttpSecurity http)메서드를 override하며 설정해야합니다.
예시 코드는 다음과 같습니다.
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
UserDetailsService userDetailsService;
@Override
protected void configure(HttpSecurity http) throws Exception {
// 인가 정책 설정
http
.authorizeRequests() // 요청에 대한 보안 검사 실행
.anyRequest().authenticated(); // 어떠한 요청에도 인증을 받도록 설정
// 인증 정책 설정
http
.formLogin(); // formLogin인증 방식을 사용하도록 설정
}
}
@EnableWebSecurity란?
위의 SecurityConfig에 붙은 @EnableWebSecurity을 보면 WebSecurityConfiguration.class, SpringWebMvcImportSelector.class, OAuth2ImportSelector.class, HttpSecurityConfiguration.class들을 import해서 실행시켜주는 것을 알 수 있습니다. 해당 annotation을 붙여야지 Securiry를 활성화 시킬 수 있습니다.
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
@Import({ WebSecurityConfiguration.class, SpringWebMvcImportSelector.class, OAuth2ImportSelector.class,
HttpSecurityConfiguration.class })
@EnableGlobalAuthentication
@Configuration
public @interface EnableWebSecurity {
/**
* Controls debugging support for Spring Security. Default is false.
* @return if true, enables debug support with Spring Security
*/
boolean debug() default false;
}
728x90
반응형
'Study > Spring' 카테고리의 다른 글
[Spring] @Component와 @Configuration (0) | 2024.02.06 |
---|---|
[Spring Security] 스프링 시큐리티 세션 정책 (Session Creation Policy) (0) | 2024.02.06 |
[Spring] 빈 등록을 위한 어노테이션 @Bean, @Configuration, @Component 차이 및 비교 (0) | 2023.05.09 |
HTTP HEAD 메소드 (0) | 2023.04.05 |
[Spring] 멀티 모듈 프로젝트 만들기 (0) | 2023.03.10 |
댓글