2. 장점
스프링 프레임웍 기반 프로젝트로써 스프링 프로젝트에서 매우 유연하게 동작
몇십줄의 코드만으로도 높은 수준의 보안을 유지
간단한 선언만으로 작동하여 대량의 코드를 손쉽게 절약
적절한 튜닝으로 기능 확장 용이
01
Spring Security 란?
Spring Security 는 J2EE 기반의 엔터프라이즈 소프트웨어 어플리케이션에 대한 포괄적인
보안 서비스를 제공한다.
사람들이 Acegi Security 를 사용하는 이유는 여러가지가 있는데 , 대부분 J2EE 서블릿 스펙이나
EJB 스펙이 일반적인 엔터프라이즈 어플리케이션 시나리오에서 필요로 하는 수준의 기능이
부족하다는 것을 깨닫고 난 이후의 프로젝트에서부터 많이 사용되어 왔다
3. 3
02 보안이란?
Authentication
인증
Authorization
권한 부여인증
후
보안의 핵심 개념
-인증과 역할 부여(권한 부여, 인가)
1.인증이란?
어플리케이션 사용자가 주장하는 본인이 맞는지 확인하는 절차
인증방식
크리덴셜 기반 : 사용자명과 비밀번호를 입력받아 저장된 정보와 일치하는지 확인
이중인증 : 한번에 2가지 방식으로 인증 (ex.은행어플-로그인과 인증서 2가지 방법으로 확인)
하드웨어 인증 : 지문 혹은 보안카드키 등 물리적인 키를 통해 인증받는 방식
2.역할 부여란?
인증을 통해서 인증된 주체를 하나 이상의 권한에 맵핑하고 보호된 리소스에 대한 권한을 체크
하는 것
부여된 권한
적절한 절차로 사용자가 인증되면 권한을 부여합니다.
리소스의 권한
적절한 권한을 가진자만 해당자원에 접근할 수 있도록 자원의 외부요청을 원천적으로 가로채
는(Intercept) 것이 권한부여의 핵심원칙이라 할 수 있겠습니다.
4. 4
서블릿 필터체인
03
접근 주
체
Principal
서블릿
응답 반
환
DelegatingFilterProxy
Spring Security 가 모든 요청을 감싸게 해서 모든 요청에 보안이 적용되게 하는 서블릿 필터.
Spring Security 는 Filter를 이용해 DispatcherServlet 처럼 요청을 가로채도록 설계되어 있습니
다.
이 Filter 는 서블릿을 감싸는 형태로설계되어 있어 서로 겹치는 요청이 들어온다면 필터를 통
해
인증 및 권한부여가 이루어진후 페이지에 대한 권한이 있는지를 먼저 확인하도록 설계되었습
니다.
리소스의 권한 (Intercept)
- Spring Security 는 인터셉터 방식으로 작동.
요청 전처리
응답 후처리
5. 5
04
커스터마이징
- Spring Security 를 적용하면서 기본설정으로는 실제 적용시키기엔 무리가 있어 반드시 커스
터마이징이 필수적으로 필요 하다.
* 주의점 : Spring Security 의 필터들은 순서가 존재하며 이순서를 어길 경우 결과를 예측할수
없으므로 특별한 경우가 아니라면 순서를 지켜주는 것이 좋다.(이미지 참조)
6. 6
05 기본 설정 순서
- 실제 소스반영을 위한 설정 순서
1.web.xml
DelegatingFilterProxy 등록
Context 설정
2.security-context.xml 생성
web.xml에서 설정한 context 위치에 파일 생성
7. 7
06 3.security-context.xml
네임 스페이스 설정
<http> 요소 설정
<intercept-url> 설정
로그인 폼 설정
권한 설정
권한 부여 매니저 설정
1) 표현식 사용 유무 설정
Use-expressions=“true”
2) Intercept-url 태그 내에 접근권한을
access에 설정
3) 표현식 사용시 가능한 권한들
• 함수 종류
hasIpAddress(ip):접근자의 ip 주소 매칭
hasRole(role):역할이 부여된 권한 매칭
hasAnyRole(role):여러 개의 권한중 매칭
ex) access=“hasAnyRole(‘ROLE_USER’,
’ROLE_ADMIN’)’”
• 조건(사용가능한 역할 조건) 종류
permitAll:모든 접근자 승인
denyAll:모든 사용자 거부
anonymous:익명 사용자인지 확인
authenticated:인증된 사용자인지 확인
rememberMe:사용자가 remember me 를 사용
해 인증했는지 확인
fullyAuthenticated:사용자가 모든 크리덴셜을
갖
춘 상태에서 인증했는지 확인