본문 바로가기
개발/egovframework

[전자정부프레임워크] 스프링시큐리티 로그인 적용(1/2)

by 아크투어 2023. 3. 30.
반응형

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. 분량이 많아서 다음편에서는 소스부분을 포스팅한다.

https://arckwon.tistory.com/entry/%EC%A0%84%EC%9E%90%EC%A0%95%EB%B6%80%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC-%EC%8A%A4%ED%94%84%EB%A7%81%EC%8B%9C%ED%81%90%EB%A6%AC%ED%8B%B0-%EB%A1%9C%EA%B7%B8%EC%9D%B8-%EC%A0%81%EC%9A%A922

 

[전자정부프레임워크] 스프링시큐리티 로그인 적용(2/2)

1. 개요 전자정부프레임워크에서 제공하는 스프링 시큐리티 적용 두번째 글이다. https://arckwon.tistory.com/entry/%EC%A0%84%EC%9E%90%EC%A0%95%EB%B6%80%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC-%EC%8A%A4%ED%94%84%EB%A7%81%EC%8

arckwon.tistory.com

 

반응형