전공영역 공부 기록

스프링시큐리티 5편 스프링시큐리티 설정 오버라이드

악분 2021. 11. 29. 21:47
반응형

 

안녕하세요. 5편에서는 스프링시큐리티 설정 오버라이드를 다룹니다.

영상: https://youtu.be/7rPWHmxC-8M

 

1. 설정 오버라이드란?

default설정이 아닌 스프링시큐리티 사용자설정을 덮어 쓰는 것을 설정 오버라이드라고 합니다. 

 

스프링시큐리티는 라이브러리를 import하는 순간 default설정이 활성화됩니다. 사용자가 아무런 설정을 하지 않아도 로그인 페이지 등을 사용할 수 있었던 이유입니다. 문제는, default 설정이 매우 한정적이므로 프로젝트에 적용하기 미흡합니다. 그러므로, 개발자는 프로젝트에 맞게 스프링시큐리티 설정을 적절하게 오버라이드 해야합니다.

 

 

2. 설정 클래스 생성

소스코드: https://github.com/choisungwook/springsecurity-youtube/blob/chatper_5_configure/springsecurity_app/src/main/java/com/demo/springseucurity/config/SecurityConfig.java

 

생성 방법은 간단합니다.

  1. WebSecurityConfigurerAdapter클래스를 상속한다.
  2. Configuration애노테이션으로 Bean등록한다.
  3. EnableWebSecurity애노테이션으로 스프링시큐리티 설정을 등록한다.
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
	...
}

 

스프링시큐리티 설정은 configure(HttpSecurity http)함수를 오버라이드하여 설정할 수 있습니다.

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            ...
    }
}

 

3. csrf disable 설정

configure(HttpSecurity http)함수에서 여러가지 보안 설정을 할 수 있는데요!. 개발 단계에서 기본적으로 설정하는 옵션이 있습니다. 첫 번째는 csrf비활성화 입니다.

 

csrf는 요청변조 공격을 막기 위한 방어로직입니다. 개발 단계에서는 편의성을 위해 csrf를 비활성화 하고 운영 단계에서 활성화하는 편입니다.

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()                
            .csrf().disable();
    }
}

 

4. 인가 설정

인가설정은 API접근에 대해 로그인과 권한을 검사합니다. 이 글에서는 편의성을 위해 모든 API요청은 로그인 없이 가능하도록 설정합니다.

 

설정방법은 anyRequest().PermitAll() 옵션을 등록해주면 됩니다. 주의 사항은 이전 옵션이 있다면 and()를 사용해서 옵션을 연결해줘야 합니다.

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()                
            	.anyRequest().permitAll()
            	.and()
            .csrf().disable();
    }
}

 

5. 로그인 방법 설정

스프링시큐리티 설정으로 로그인 방법을 등록할 수 있습니다. Basic Auth, FormLogin 등이 있습니다. 익숙한 로그인 방법은 FormLogin입니다. 로그인 방법은 6편에서 자세히 다룹니다. 우선, 이 글에서는 Formlogin을 등록하겠습니다.

 

등록 방법은 간단합니다. formLogin()을 등록하면 됩니다. formLogin이 등록되면 login.html페이지와 /login API가 자동생성됩니다.

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()                
            	.anyRequest().permitAll()
            	.and()
            .formLogin()
                .and()
            .csrf().disable();
    }
}

 

로그인 실습은 영상(https://youtu.be/7rPWHmxC-8M?t=652)에서 만나볼수 있습니다. 

 

6. 로그아웃 설정

이제 설정 마지막입니다. 로그인도 등록했으니 로그아웃도 등록해야겠죠? logout()을 추가하면 로그아웃이 등록됩니다. /logout API가 자동으로 생성됩니다.

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()                
            	.anyRequest().permitAll()
            	.and()
            .formLogin()
                .and()
			.logout()
            	.and()
            .csrf().disable();
    }
}

 

로그아웃 실습은 영상(https://youtu.be/7rPWHmxC-8M?t=725)에서 만나볼 수 있습니다.

 

7. 테스트 사용자 추가

스프링시큐리티 설정을 오버라이드하면 더이상 user계정(1편 https://malwareanalysis.tistory.com/143 참고)이 생성되지 않습니다. 인메모리 사용자를 추가하지 않았더라면 스프링프로파일을 이용해서 테스트사용자를 추가할 수 있습니다.

# application.properties
spring.security.user.name=user
spring.security.user.password=password
반응형