스프링 시큐리티란?
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을 기반으로 접근권한을 검사한다.
'자바 > 스프링(Spring)' 카테고리의 다른 글
스프링 시큐리티 + OAuth2.0 (Kakao편) (0) | 2022.09.25 |
---|---|
스프링시큐리티 + OAuth2.0 사용해보자 (Google편) (1) | 2022.09.24 |
자바(Spring) OpenAPI를 통한 JSON Parser 코드 (0) | 2022.09.08 |
ArgumentResovler 와 Interceptor에 대하여 (0) | 2022.08.23 |
스프링(Spring) JSon 역직렬화 문제 (중복배열) (0) | 2022.07.08 |