반응형
1. 개요
- 이번포스팅에서는 전자정부프레임워크에서 제공하는 스프링 시큐리티를 적용해본다.
- 기본적으로 전자정부프레임워크에서 제공하는 시큐리티는 DB 권한관리/역할관리를 사용해야한다.
- 일반적인 스프링 시큐리티와는 다른개념이다.
- 좋든 싫든 기본적으로 몇가지 테이블을 생성해야한다.
- egovframework 3.10 기준으로 작성하였고, 서블릿이 3.0 버전대라 예전에는 시큐리티 관련 필터 설정을 XML파일에서 하였으나 3버전대 부터는 java파일에서 필터를 작성해야한다.
- 해당 포스팅은 최소한으로 설정해서 스프링 시큐리티를 이용할수 있는 방법을 설명한다.
2. 준비단계 및 개발환경
- 개발환경은 egovframework 3.10 / jdk1.8 / tomcat8 / mariadb 또는mysql
- 기본적으로 전자정부에서 제공하는 DB구조는 아래와같다.
- 위내용을 조금 간소화 해본다. 아래스크립트를 DB툴에서 하나씩 실행한다.
- DDL 스크립트 (mariadb에서 작업했으나 mysql도 사용가능)
CREATE TABLE `tb_cms_author` (
`author_cd` VARCHAR(30) NOT NULL COMMENT '권한코드',
`author_nm` VARCHAR(60) NOT NULL COMMENT '권한코드명',
`author_dc` VARCHAR(255) DEFAULT NULL COMMENT '권한코드설명',
PRIMARY KEY (`author_cd`),
UNIQUE KEY `idx_author_cd` (`author_cd`) USING BTREE
) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COMMENT='권한코드관리';
CREATE TABLE `tb_cms_role_inf` (
`role_cd` varchar(50) NOT NULL COMMENT '역할코드',
`role_nm` varchar(60) NOT NULL COMMENT '역할명',
`role_pttrn` varchar(300) DEFAULT NULL COMMENT '역할패턴',
`role_dc` varchar(200) DEFAULT NULL COMMENT '역할설명',
`role_ty` varchar(20) NOT NULL COMMENT '역할유형',
`role_sort` int(11) NOT NULL COMMENT '정렬순서',
PRIMARY KEY (`role_cd`),
UNIQUE KEY `idx_role_cd` (`role_cd`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='역할관리';
CREATE TABLE `tb_cms_author_role_ref` (
`author_cd` varchar(30) NOT NULL COMMENT '권한코드',
`role_cd` varchar(50) NOT NULL COMMENT '역할코드',
`cre_dt` timestamp NULL DEFAULT NULL COMMENT '등록일자',
PRIMARY KEY (`author_cd`,`role_cd`),
UNIQUE KEY `idx_author_cd_role_cd` (`author_cd`,`role_cd`) USING BTREE,
KEY `idx_role_cd` (`role_cd`),
KEY `idx_author_cd` (`author_cd`) USING BTREE,
CONSTRAINT `tb_cms_author_role_ref_FK` FOREIGN KEY (`author_cd`) REFERENCES `tb_cms_author` (`author_cd`) ON DELETE CASCADE,
CONSTRAINT `tb_cms_author_role_ref_FK_1` FOREIGN KEY (`role_cd`) REFERENCES `tb_cms_role_inf` (`role_cd`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='권한역할관계';
CREATE TABLE `tb_cms_role_hierarchy` (
`parnts_role` VARCHAR(30) NOT NULL COMMENT '부모역할',
`chldrn_role` VARCHAR(30) NOT NULL COMMENT '자식역할',
PRIMARY KEY (`parnts_role`,`chldrn_role`)
) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COMMENT='역할계층구조';
CREATE TABLE `tb_cms_author_user` (
`scrty_dtrmn_trget_id` VARCHAR(20) NOT NULL COMMENT '보안설정사용자아이디',
`author_cd` VARCHAR(30) NOT NULL COMMENT '권한코드',
`cre_dt` TIMESTAMP NULL DEFAULT NULL COMMENT '생성일시',
PRIMARY KEY (`scrty_dtrmn_trget_id`),
UNIQUE KEY `idx_scrty_dtrmn_trget_id` (`scrty_dtrmn_trget_id`) USING BTREE,
KEY `idx_author_cd` (`author_cd`) USING BTREE,
CONSTRAINT `tb_cms_author_user_FK` FOREIGN KEY (`author_cd`) REFERENCES `tb_cms_author` (`author_cd`) ON DELETE CASCADE
) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COMMENT='사용자권한생성관리';
CREATE TABLE `tb_user` (
`user_id` varchar(20) NOT NULL COMMENT '사용자아이디',
`user_pw` varchar(255) NOT NULL COMMENT '사용자비밀번호',
`user_nm` varchar(20) NOT NULL COMMENT '사용자성명',
`mbtl_no` varchar(20) NOT NULL COMMENT '휴대폰번호',
`email_adres` varchar(255) NOT NULL COMMENT '이메일주소',
PRIMARY KEY (`user_id`),
UNIQUE KEY `idx_user_id` (`user_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='사용자관리';
- DML 스크립트
INSERT INTO `tb_cms_author`(`author_cd`,`author_nm`,`author_dc`) VALUES
('IS_AUTHENTICATED_ANONYMOUSLY','ANONYMOUSLY','스프링시큐리티 내부사용(롤부여 금지)'),
('IS_AUTHENTICATED_FULLY','FULLY','스프링시큐리티 내부사용(롤부여 금지)'),
('IS_AUTHENTICATED_REMEMBERED','REMEMBERED','스프링시큐리티 내부사용(롤부여 금지)'),
('ROLE_ADMIN','관리자','관리자'),
('ROLE_ANONYMOUS','익명사용자','익명사용자'),
('ROLE_USER','사용자','사용자');
insert into `tb_cms_role_inf`(`role_cd`,`role_nm`,`role_pttrn`,`role_dc`,`role_ty`,`role_sort`) values
('web-000001','모든접근제한','\\A/.*\\/.*\\Z','모든자원에 대한 접근 제한 롤','METHOD',1);
insert into `tb_cms_role_hierarchy`(`parnts_role`,`chldrn_role`) values
('IS_AUTHENTICATED_ANONYMOUSLY','IS_AUTHENTICATED_REMEMBERED'),
('IS_AUTHENTICATED_FULLY','ROLE_USER'),
('IS_AUTHENTICATED_REMEMBERED','IS_AUTHENTICATED_FULLY'),
('ROLE_ANONYMOUS','IS_AUTHENTICATED_ANONYMOUSLY'),
('ROLE_USER','ROLE_ADMIN');
insert into `tb_cms_author_user`(`scrty_dtrmn_trget_id`,`author_cd`,`cre_dt`) values
('admin','ROLE_ADMIN','2022-12-19 14:47:42'),
('superadmin','ROLE_ADMIN','2022-08-08 15:50:19');
3. 공통컴포넌트 선택
- 역할/권한관리 항목을 필수적으로 선택해야한다.
- 그러면 핵심파일인 context-security.xml 가 생성된다.
4. 필요한 주요 소스파일들
- java파일
- xml파일 : context-security.xml
5. 분량이 많아서 다음편에서는 소스부분을 포스팅한다.
반응형
'개발 > egovframework' 카테고리의 다른 글
[전자정부프레임워크] Id Generation 시퀀스 관리 (0) | 2023.05.02 |
---|---|
[전자정부프레임워크] 스프링시큐리티 로그인 적용(2/2) (0) | 2023.03.31 |
[전자정부프레임워크] Spring quartz 스케줄러 사용법 (0) | 2023.03.30 |
[전자정부프레임워크] Spring profile (운영,개발 분리) (0) | 2023.03.22 |
[전자정부프레임워크] 실무용 개발환경 구축해보기 (0) | 2023.03.21 |