WebSecurityConfigurerAdapter
클래스가 실행되게 됩니다. WebSecurityConfigurerAdapter
클래스는 스프링 시큐리티의 웹 보안 기능의 초기화 및 설정들을 담당하는 내용이 담겨있으며 내부 적으로 getHttp()
메서드가 실행될 때 HTTPSecurity
클래스를 생성하게 됩니다. //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인증 방식을 사용하도록 설정
}
}
위의 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;
}
대박~ 스프링 시큐리티 검색하다가 렉스 블로그가 나왔어!!