Spring : Security 정의

cad·2022년 4월 12일
0

Spring

목록 보기
15/15

Spring Security 란?

Spring Security는 Spring 기반의 애플리케이션의 보안(인증과 권한, 인가 등)을 담당하는 스프링 하위 프레임워크이다. Spring Sercurity는 인증과 권한에 대한 부분을 Filter 흐름에 따라 처리한다.

Filter는 Dispatcher Servlet 으로 가기 전에 적용되므로 가장 먼저 URL 요청을 받지만 인터셉터는 디스패처와 컨트롤러 사이에 위치한다는 점에서 적용 시기 차이가 있다.

Spring Security는 보안과 관련해서 체계적으로 많은 옵션을 제공해주기 때문에 개발자 입장에서는 일일이 보안 관련 로직을 작성하지 않아도 된다는 장점이 있다.

인증 관련 Architecture

인증(Authorization)과 인가(Authentication)

  • 인증 : 해당 사용자가 본인이 맞는지 확인 하는 절차 > 로그인 과정
  • 인가 : 인증된 사용자가 요청한 자원에 접근 가능한 지를 결정하는 절차 > 관리자 권한 등

Security 주요 모듈 동작 과정 : 망나니개발자


SecurityConfig

@Configuration
@EnableWebSecurity //Spring Security Filter 가 Spring Filter Chain 에 등록된다.
public class SecurityConfig extends WebSecurityConfigurerAdapter {


	@Override
	protected void configure(HttpSecurity http) throws Exception {
		http.csrf().disable();
		http.authorizeRequests()
						.antMatchers("/user/**").authenticated()
						.antMatchers("/manager/**").access("hasRole('ROLE_ADMIN') or hasRole('ROLE_MANAGER')")
						.antMatchers("/admin/**").access("hasRole('ROLE_ADMIN')")
						.anyRequest().permitAll()
						.and()
						.formLogin()
						.loginPage("/loginForm")
						.loginProcessingUrl("/login")
						.defaultSuccessUrl("/");
	}
}

... extends WebSecurityConfigurerAdapter

  • 사용자 지정 자체 보안 구성을 원할 때 WebSecurityConfigurerAdapter을 상속 받아 구현하면 된다. 이렇게 하면 기본 자동 구성이 비활성화되고 사용자 지정 보안 구성이 활성화 된다.

@EnableWebSecurity

  • Security를 사용할 때 달아주는 어노테이션
  • 어노테이션을 달면 SpringSecurityFilterChain이 자동으로 포함된다.

csrf().disable();

  • 기본적으로 @EnableWebSecurity에 의해서 csrf protection이 활성화 된다.
  • 테스트를 위해 csrf 관련 기능은 사용하지 않는다.

authorizeRequests()

  • 특정 경로에 대해 특정한 권한을 가진 사용자만 접근할 수 있도록 빌더 패턴으로 메서드를 체이닝한다.

antMatchers("/user/**")

  • /user/** 경로에 대해 다음 메서드를 설정한다.

authenticated()

  • 인증된 사용자만이 접근할 수 있도록 한다.

hasRole('ROLE_ADMIN')

  • 파라미터의 권한을 지닌 사용자가 접근(access) 가능하다.

anyRequest().permitAll()

  • 이외의 요청에 대해 모든 경로를 사용자에게 허용한다.

and()

  • 추가 설정 허용

로그인 관련

.formLogin()
.loginPage("/loginForm")
.loginProcessingUrl("/login")
.defaultSuccessUrl("/");
  • form을 통한 login을 활성화 하고 사용자가 login 이 필요한 페이지에 접근을 했을 때 /loginForm 페이지로 핸들링되어 이동한다. 없다면 시큐리티에서 기본 제공하는 페이지로 이동한다.
  • loginProcessingUrl("/login")에서 /login 으로 post요청이 들어오면 스프링에서 로그인을 진행해주고 성공 시 "/" 페이지로 이동한다.

출처
메타코딩님 인프런
망나니 개발자님
https://medium.com/lucky-sonnie/spring-security-websecurityconfigureradapter%EB%9E%80-6ae8e4baef7a
https://devuna.tistory.com/59

profile
Dare mighty things!

0개의 댓글