목차

Architecture

개요

전자정부 개발프레임워크의 Spring Security 기본구조와 기본 환경 설정을 설명한다.
전자정부 개발프레임워크의 Server Security는 컨테이너 기동시 적용되는 XML기반 인증이 아닌 실시간 적용되는 DB기반의 JDBC 인증을 사용한다.

설명

Spring Security 아키텍처

웹어플리케이션 인증절차

  1. 리소스 요청
  2. 요청에 대해 보호되고 있는 자원인지 판단
  3. 아직 인증이 안되었으므로 HTTP 응답코드(오류) 또는 특정 페이지로 redirect
  4. 인증 메커니즘에 따라 웹 페이지 로그인 폼 또는 X509 인증서
  5. 입력 폼의 내용을 HTTP post 또는 인증 세부사항을 포함하는 HTTP 헤더를 서버로 요청
  6. 신원정보(credential)가 유효한지 판단
    • 유효한 경우 다음단계 진행
    • 유효하지 않을 경우 신원정보 재요청(되돌아감)
  7. 보호 자원의 접근 권한이 있을 경우 요청 성공 / 접근 권한이 없을 경우 forbidden 403 HTTP 오류

Spring Security Filter Chain

Security Configuration

필수라이브러리

web.xml 등록

example
<filter>
	<filter-name>springSecurityFilterChain</filter-name>
	<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
	<filter-name>springSecurityFilterChain</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>

주요테이블

사용자 인증과 관련된 테이블은 사용자테이블과 사용자권한테이블이며 사용자권한관련 테이블은 역할, 자원, 역할계층 등의 테이블이 있다.

DaoAuthenticationProvidor

사용자 테이블
CREATE TABLE USERS (
	USERNAME VARCHAR(50) NOT NULL,
	PASSWORD VARCHAR(50) NOT NULL,
	ENABLED BIT NOT NULL,
	CONSTRAINT PK_USERS PRIMARY KEY(USERNAME)
);
사용자 권한 테이블
CREATE TABLE AUTHORITIES (
	USERNAME VARCHAR(50) NOT NULL,
	AUTHORITY VARCHAR(50) NOT NULL,
	CONSTRAINT PK_AUTHORITIES PRIMARY KEY(USER_ID,AUTHORITY),
	CONSTRAINT FK_USERS FOREIGN KEY(USER_ID) REFERENCES USERS(USER_ID),
	CONSTRAINT FK_ROLES3 FOREIGN KEY(AUTHORITY) REFERENCES ROLES(AUTHORITY)
);
역할 테이블
CREATE TABLE ROLES (
	AUTHORITY VARCHAR(50) NOT NULL,
	ROLE_NAME VARCHAR(50),
	DESCRIPTION VARCHAR(100),
	CREATE_DATE DATE,
	MODIFY_DATE DATE,
	CONSTRAINT PK_ROLES PRIMARY KEY(AUTHORITY)
);
AUTHORITYDESCRIPTION
IS_AUTHENTICATED_ANONYMOUSLY익명 사용자
IS_AUTHENTICATED_REMEMBEREDREMEMBERED 사용자
IS_AUTHENTICATED_FULLY인증된 사용자
ROLE_RESTRICTED제한된 사용자
ROLE_USER일반 사용자
ROLE_ADMIN관리자
ROLE_AA 업무
ROLE_BB 업무
역할 계층 테이블

역할의 계층구조를 저장하는 테이블

CREATE TABLE ROLES_HIERARCHY (
	PARENT_ROLE VARCHAR(50) NOT NULL,
	CHILD_ROLE VARCHAR(50) NOT NULL,
	CONSTRAINT PK_ROLES_HIERARCHY PRIMARY KEY(PARENT_ROLE,CHILD_ROLE),
	CONSTRAINT FK_ROLES1 FOREIGN KEY(PARENT_ROLE) REFERENCES ROLES(AUTHORITY),
	CONSTRAINT FK_ROLES2 FOREIGN KEY(CHILD_ROLE) REFERENCES ROLES (AUTHORITY)
);
CHILD_ROLEPARENT_ROLE
ROLE_ADMINROLE_USER
ROLE_USERROLE_RESTRICTED
ROLE_RESTRICTEDIS_AUTHENTICATED_FULLY
IS_AUTHENTICATED_FULLYIS_AUTHENTICATED_REMEMBERED
IS_AUTHENTICATED_REMEMBEREDIS_AUTHENTICATED_ANONYMOUSLY
ROLE_ADMINROLE_A
ROLE_ADMINROLE_B
ROLE_AROLE_RESTRICTED
ROLE_BROLE_RESTRICTED
보호된 자원 테이블
CREATE TABLE SECURED_RESOURCES (
	RESOURCE_ID VARCHAR(10) NOT NULL,
	RESOURCE_NAME VARCHAR(50),
	RESOURCE_PATTERN VARCHAR(300) NOT NULL,
	DESCRIPTION VARCHAR(100),
	RESOURCE_TYPE VARCHAR(10),
	SORT_ORDER INTEGER,
	CREATE_DATE DATE,
	MODIFY_DATE DATE,
	CONSTRAINT PK_RECURED_RESOURCES PRIMARY KEY(RESOURCE_ID)
);

url, method, pointcut으로 자원을 보호한다.

RESOURCE_IDRESOURCE_PATTERN
web-000001\A/test\.do\Z
web-000002\A/sale/.*\.do\Z
web-000003\A/cvpl/((?!EgovCvplLogin\.do).)*\Z
mtd-000001egovframework.rte.sample.service.EgovSampleService.updateSample
mtd-000002egovframework.rte.sample.service.EgovSampleService.deleteSample
mtd-000003execution(* egovframework.rte.sample..service.*Service.insert*(..))
보호된 자원 역할 테이블

보호된 자원과 역할과의 매핑 테이블

CREATE TABLE SECURED_RESOURCES_ROLE (
	RESOURCE_ID VARCHAR(10) NOT NULL,
	AUTHORITY VARCHAR(50) NOT NULL,
	CONSTRAINT PK_SECURED_RESOURCES_ROLE PRIMARY KEY(RESOURCE_ID,AUTHORITY),
	CONSTRAINT FK_SECURED_RESOURCES FOREIGN KEY(RESOURCE_ID) REFERENCES SECURED_RESOURCES(RESOURCE_ID),
	CONSTRAINT FK_ROLES4 FOREIGN KEY (AUTHORITY) REFERENCES ROLES(AUTHORITY)
);

참고자료