자바/스프링(Spring)

스프링 시큐리티를 사용해보자!!

류창 2022. 9. 23. 21:13
반응형

 

 

스프링 시큐리티란?

 

Spring Security는 엔터프라이즈 애플리케이션에 대한 인증, 권한 부여 및 기타 보안 기능을 제공하는 Java / Java EE 프레임 워크입니다.

 

 

스프링 시큐리티를 사용하면,  프로젝트를 만들때 사용하는 로그인 및 회원가입 구현이 매우 편리하다!!  

 

이전 방식으로 ArgumentResolver와  Interseptor를 구현해서 로그인의 인증절차를 하였지만,

 

스프링 시큐리티를 사용하면 더 더 편리하다. 

 

 

 

0.준비하기

 

 

스프링 시큐리티 역시 라이브러리이기 때문에  가져와야한다.

 

 

 

 

1. 스프링 시큐리티 설정 (Security Config) 클래스 생성

 

 

 

스프링 시큐리티를 사용하려면   웹에다 등록을 해줘야한다.

 

사용하는 어노테이션의 의미는 다음과같다.

 

@Configuration : 스프링이  Config로 사용할 @Bean임을 인식시키고 컨테이너에 등록하게함.

@RequiredArgsConstructor :  생성자 주입을 사용하기위한 어노테이션 (스프링 시큐리티와는 연관이없음)

@EnableWebSecurity :   스프링 시큐리티를 활성화한다. 이 주석을 호출하면 다양한 시큐리티 기술을 Import한다.

@EnableGlobalMethodSecurity:  @Secured, @PreAuthorize.. 등 어노테이션을 활성화시켜준다. 이 어노테이션은 추후에  설명 하겠다. 

 

 

중요한건 @Configuration 과 @EnableWebSecurity 설정해주자!

 

또한,  SecurityConfig 에서  WebSecurityConfiguration 이라는 클래스를 상속받자.

 

이 클래스가 SpringSecurity에서 다운받은 클래스이다.

 

 

2.스프링 시큐리티 설정하기

 

 

SpringConfig에서 filterChain을  빈으로 등록합시다.

 

 

스프링 시큐리티는 이와같이  FilterChain을 가지는데,  FilterChain을 통하여  유저의 접근권한을 단계별로 체크할 수 있다.

 

 

http.csrf().diable() ->  csrf설정을 취소하는설정이다.   

@EnableWebSecurity를 하면 자동적으로 csrf를 설정하는데, 이를 취소한다.

 

csrf에 대해서 더욱 자세히 알고싶은 분은 이 사이트를 참고해주세요.

https://zzang9ha.tistory.com/341  

 

 

.anyMatchers(Path) :  이 메소드를 통해,  접근할 Path에  접근 권한을 필터링 할수있다.

 

.anyMatchers.access( attribute ): 이 메소드를통해, 접근할 Path에  입장조건을 설정할수있다.

attribute에서 설정할수있는건, Role, Authorization , Permisson등등.. 다양하게 입장조건을 등록가능하다.

 

.anyRequest.permitAll() :  아무런 요청에 모든 권한허용   

 

.and() : 다음 필터 등록 

 

.formlogin() : 시큐리티에서 지원하는 FormLoginConfigurer를 사용하겠다.

 

.loginPage(Path) : 개발자가 만든  로그인 페이지를 설정할 수 있다.

-> 스프링시큐리티 세션이 없는데,  권한부여가 된 페이지를 요청할경우  해당 Path로 Redirect를 지원해준다.

-> <매우 편리!!!>

 

.loginProcessingUrl(path): 로그인 정보를 Submit하고난 Post처리 경로를 설정한다. 

-> /login을 설정하면, Security가  일반로그인을 알아서 처리해준다.

 

.defalutSuccessUrl (path):  로그인 Post 처리후 이동할 path경로 설정

 

 

다음과같은 메소드를 자신의 프로젝트에 맞게끔, 섞어쓰면 된다.

OAuth메소드는 다른 포스팅에 정리할 예정이다.

 

 

2-1. 어노테이션으로 스프링 시큐리티 설정하기

 

@EnableGlobalMethodSecurity(secured = true, prepost = true) 를 시큐리티설정에 선언을 했기때문에,

@Secured , @PreAuthorize ,@PostAutorize를 사용할수있다.

 

@Secured , @PreAuthorize 를 선언하면  해당매핑에  권한을 부여한다.

 

@Secured는 표현식이 없기에,  권한을 1개 부여할수있고,

 

@PreAuthorize는 표현식이 있기에, 여러개의 권한을 부여할수가 있다.

 

스프링 시큐리티에서 .antMatchers를 사용하여 통합적으로 접근 조건을 부여할수 있고,

어노테이션으로  각 메소드마다 부분적으로 접근 조건을 설정할수있다.

3. 로그인 정보담는 DTO 클래스 만들기

 

스프링 시큐리티가  로그인 처리를 해주지만,   데이터를 그릇(DTO)를 만들어준다.

 

스프링이 로그인 처리를 처리하기위해 시큐리티의 UserDetails 를 상속받는다.

 

 

4. 로그인 후처리 설정하기

 

로그인 후처리를 설정한다.  시큐리티가 자동으로 로그인처리를 해주지만, 

 

다음과같이 로그인 중복처리는 해주지않으므로, 따로 설정을 해줘야한다.

 

 

PrincipalDetails는 UserDetils를 상속받았기때문에,

 

스프링시큐리티가 자동적으로,

 

PrincipalDetails -> Authentication ->  시큐리티 session으로 만들어준다.

 

이 Session을 기반으로  접근권한을 검사한다.

반응형