# Spring Security 이해와 활용
## 1.개요 - Spring security
- 엔터프라이즈 어플리케이션을 위한 인증(Authentication)권한 처리(Authorization) 서비스를 제공하는 강력하고 유연한 보안 솔루션
- Servlet Filter 와 Java AOP 를 통한 Interception를 사용하여 보안을 강제하며 Spring의 IoC와 lifecycle 서비스 기반으로 동작
- Authentication, Web URL authorizationo, Method 호출 authorization, 채널 보안(https 강제) 등의 주요기능 제공
- Service Layer 보안 제공으로 Layering issue 해결 및 웹 클라이언트 외의 다양한 rich 클라이언트/웹 서비스에 대한 보안 제어 지원
- 재사용성, 이식성, 코드 품질 및 다양한 타 프레임워크 지원
## 2.기본설정 - maven 설정
### Dependency 추가
```xml
org.springframework.security
spring-security-core
${spring.maven.artifact.version}
org.springframework.security
spring-security-web
${spring.maven.artifact.version}
org.springframework.security
spring-security-config
${spring.maven.artifact.version}
```
- spring-security-core
- spring-security-web
- spring-security-config
3개를 추가한다.
### taglib 사용시 추가
```xml
org.springframework.security
spring-security-taglibs
${spring.maven.artifact.version}
```
### egovframework Dependency 추가
```xml
egovframework.rte
egovframework.rte.fdl.security
2.6.0
```
### web.xml
```xml
springSecurityFilterChain
org.springframework.web.filter.DelegatingFilterProxy
springSecurityFilterChain
/*
```
`filterchain`을 사용한다.
## 2. 기본설정 - DelegatingFilterProxy
- Spring security가 모든 request를 감싸게 해서 강제적으로 보안이 적용되도록 하는 servlet filter
- 실제로는 ``에 지정된 이름을 갖는 Spring bean(filter interface 구현)을 호출하는 역할을 담당
- springSecurityFilterChain : 이후 설정될 Spring security 에 의해 자동으로 등록되는 filter bean
## 2. 기본설정 - security 설정
context-security.xml
```xml
```
authentication-manager 사용. `In-Memory authentication`
```xml
```
## 3. Form & Basic 로그인 - auto-config
`auto-config-="true"`
```html
```
### 설정 변경
```xml
```
설정변경
```xml
```
## 4. Database 확장 - 인증 확장 설정
### EgovJdbcUserDetailsManager 적용
```xml
```
- 기존 와의 차이점
- Role Hierarchy 지원(기존의 경우 별도 UserDetailsServiceWrapper 또는 RoleHierarchyVoter 필요)
- Mapping class(MappingSqlQuery) 지원 (기존의 경우 상속 필요)