티스토리 뷰
서론
Spring Security는 Spring으로 웹을 개발한다면 필수적인 프레임워크이다. 왜일까? 기본적인 세션관리 HTTP 보안 및 어플리케이션 보안을 담당해준다. 초기 설정은 생각보다 복잡하다. 그리고 개발자마다 시큐리티를 적용한 방법이 각기 다르다. 어플리케이션 특징마다 설정값은 다르지 몰라도 초기 세팅 방법은 개발자마다 다르기에 구조와 원리를 이해 못하면 접근하기 어렵다. 필자는 최대한 쉬운방법으로 입문자 들에게 소개하고자 한다.
아래 포스팅 순서대로 따라한다면, 동작하는데 무리가 없다고 생각한다.
들어 가기에 앞서 .. 알아야될 개념
DB 기초 모델링
Spring을 이용해 최소 한개 웹페이지 만들어본 경험 (세션과 인증,보안이 중요한 이유를 알아야 하기에..)
필자 개발 환경 19.08.13 기준
Spring Boot 2.1.6 v
Spring-boot-starter-security 최신 버전
Thymeleaf 최신 버전
Mybatis 2.0.1 v
Mysql 최신 버전
Spring Security 인증 구조와 원리
이부분 부터 졸음이 올지 모른다..ㅠ 필자 생각으로 알아야 될 핵심 개념 위주로 작성해본다. 구체적으로 알고 싶다면 해당 문서에 들어가서 공부하면 되겠다 :)
이 순서를 외울 필요도 없고 알아야될 의무도 없다.
위 구조를 개발자가 다 커스텀마이징 할필요도 없다. 가장 중요한 부분은 4번 부터 8번까지이다.
Manager로 부터 값을 받아와 Porvider 부터 UserDetails 까지 이부분이 개발자 서로 자기 입맛에 맞게 구성 했기 때문에 이부분만 자기가 커스텀 마이징 할줄알면 사실상 시큐리티는 끝이다. !!!
순서대로 각 역할을 설명 짧게 설명하겠다.
1-3 번까지는 간단한 개념을 설명하고 4-8번까지는 코드로 설명 하겠다.
1. AuthenticationFilter가 Request 요청
Filter에서 아이디와 비밀번호가 null인지 혹은 체크 하기 위해서다.
뭐 자바스크립트로도 개발자가 하겠지만 시큐리티가 한번 더해준다는 의미다.
2. Filter로 유효하다 판단되면 인증용 객체(토큰)이 생성
3. Manager는 실제 인증을 할 AuthenticationProvider 에게 전달한다.
4-8번까지는 아무리 개념을 설명해도 자기가 직접 구현해야 되는 부분이기에 코드로 설명을 하겠다.
아래 글부터 차례 차례 따라하면 되겠다.
Spring Security Maven 등록
<!--Security-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
Security Config 클래스 등록
@Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(AuthenticationManagerBuilder auth) { //실제 인증을 진행할 Provider } @Override public void configure(WebSecurity web) { //이미지,자바스크립트,css 디렉토리 보안 설정 } @Override protected void configure(HttpSecurity http) throws Exception { //HTTP 관련 보안 설정 **가장 중요 } }
시큐리티를 설정할 클래스에 @Configuration 와 @EnableWebSecurity를 넣어줍니다.
위 소스를 보듯이 3개의 configure 메소드를 오버라이딩 한다.
여기서 부터 이제 개발자 마다 구현하는 방법이 각각 다르다.
필자 방법보다 다른 방법을 선택하고 싶다면 여기서부터
오버라이딩한 각각의 메소드를 검색해 다른 개발자는 어떻게 구현했는지 살펴보면 되겠다.
정답은 없다.
오버라이딩한 메소드 부가 설명
AuthenticationManagerBuilder 를 매개변수로 받는 configure메소드 :
여기서 DB 로부터 아이디,비번이 맞는지 해당 유저가 어떤 권한을 가지는지를 체크한다.
위에 언급한 인증 구조중에 4번에 해당,
UserDetailsService 인터페이스를 상속받은 클래스가 있다면 그 클래스에서 인증을 시도 하면된다.
Websecurity를 매개변수로 받는 configure 메소드 :
이미지 파일, css 파일, 자바스크립트 파일 을 접근 가능하게 처리하는 소스를 입력하면 된다.
HttpSecurity를 매개변수로 받는 configure 메소드 :
이 메소드에서 URL 별 권한 설정, 로그인,세션 등등 HTTP 보안 관련 설정을 해주면 된다.
UserDetailService 구현
@Service public class SecurityService implements UserDetailsService { @Override public UserDetails loadUserByUsername(String id) throws UsernameNotFoundException { return null; } }
인증 구조중에 5번에 해당하는 구간이다.
UserDetailService를 받으면 loadUserByUsername 메소드를 오버라이딩 해야한다.
이 메소드에서 DB로 아이디 값을 체크하면 끝이다!!!
Return 값으로 인증구조 6번인 UserDetails를 반환해주면 시큐리티는 구조는 이해 한것이다.
마치며 ...
다음 2번째 포스팅때 config 클래스와 UserDetailService를 실전에 맞게 구현할 예정이고 DB를 설계해 직접 인증 테스트를 진행할 예정이다.
'Spring' 카테고리의 다른 글
스프링 부트 시큐리티(spring boot security) 시작 [3] 최종 (5) | 2019.08.17 |
---|---|
스프링 부트 시큐리티(spring boot security) 시작 [2] (2) | 2019.08.16 |
스프링부트 리캡챠 등록,사용 법 (1) | 2019.08.13 |
Spring boot yaml 파일 사용법 (0) | 2019.08.13 |
Spring boot Thymeleaf 자주 사용하는 문법 (0) | 2019.08.09 |
- Total
- Today
- Yesterday
- spring boot sse란
- spring boot sse 예제
- s3 호스팅
- aws s3 호스팅 방법
- spring boot sse구현
- spring
- AWS S3 웹호스팅
- spring boot sse 예제코드
- spring boot security
- s3 serverless
- 이클립스톰캣연동#이클립스#톰캣#스프링#jsp#톰캣연동
- SQL
- boot s3
- spring boot sse
- spring boot sse sample
- boot
- 조선업투자
- 한화오션
- S3 웹호스팅
- AWS
- spring s3 사용법
- 스프링 부트
- pcsql
- Spring Boot
- HD현대중공업
- 스프링 부트 시큐리티
- spring sse
- aws s3 호스팅
- 국내조선업
- AWS serverless s3
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |