spring security의 컨셉은 이제 어느 정도 감이 왔으리라 생각됩니다. 그동안 설정 파일에서 인증을 했었습니다. 여러분들도 아시겠지만 설정 파일에서 인증을 하는 것은 현업에서 사용할 수 없습니다. 우리는 db에 저장된 정보를 이용해서 인증처리를 해야겠죠?
권한 정보를 db로 관리한다는 것은 권한 정보만 db에 관리하고 저장하는 것이 아니라 생각해야 할 것이 많이 있습니다.
우리는 우선 db인증을 먼저 확인하기 위해 member테이블(사용자 정보를 저장하는 테이블)에 컬럼을 추가하여 권한을 관리해 보도록 하겠습니다.
member테이블에 authority권한을 추가하고 "ROLE_USER"와 "ROLE_ADMIN"을 셋팅하도록 하겠습니다.
member테이블에 authority권한을 추가한 후 모든 컬럼을 우선 "ROLE_USER"로 셋팅합니다.
"ROLE_ADMIN"권한도 있어야 하므로 job테이블의 j003에 속하는 member를 "ROLE_ADMIN"으로 수정하였습니다.
alter table member
add ( authority varchar2(20));
update member
set authority='ROLE_USER';
update member
set authority='ROLE_ADMIN'
where deptno in (select deptno
from dept
where job_category='j003');
commit;
job은 직업군을 정리한 테이블로 다음과 같습니다. j003은 전산관리 직군입니다.
#업무테이블
create table job(
job_id varchar2(10) primary key,
job_name varchar2(15),
job_category varchar2(15),
menupath varchar2(50));
insert into job values('j001','영업','영업관리','/menu/sales_menu.jsp');
insert into job values('j002','인사','인사관리','/menu/insa_menu.jsp');
insert into job values('j003','전산','전산관리','/menu/it_menu.jsp');
insert into job values('j004','경영지원','경영관리','/menu/manage_menu.jsp');
insert into job values('j005','재무','재무관리','/menu/jaemu_menu.jsp');
j003직군에 속하는 부서는 d003, d0031, d004, d005, dg003부서입니다.
#부서 테이블
create table dept(
deptno varchar2(15) primary key,
deptname varchar2(15),
deptStartDay date,
deptEndDay date,
deptlevel varchar2(5),
deptstep varchar2(5),
deptuppercode varchar2(15),
job_category varchar2(15),
mgr_id varchar2(15),
deptaddr varchar2(50),
depttel varchar2(15)
);
insert into dept values('d001','인사팀','1999/9/27',null,'2','1','dg001','j002','9401023jang','서울시 서초구 kitri빌딩7층','02-225-1111');
insert into dept values('d002','재무팀','1999/9/27',null,'2','1','dg001','j005','9401023jang','서울시 서초구 kitri빌딩7층','02-225-1122');
insert into dept values('d003','개발팀','1999/9/27',null,'2','1','dg003','j003','9401023jang','서울시 서초구 kitri빌딩6층','02-225-1133');
insert into dept values('d0031','디자인팀','1999/9/27',null,'3','1','d003','j003','9401023jang','서울시 서초구 kitri빌딩6층','02-225-1121');
insert into dept values('d0032','Ajax팀','1999/9/27',null,'3','2','d003','j003','9401023jang','서울시 서초구 kitri빌딩1층','02-225-1131');
insert into dept values('d004','개발지원','1999/9/27',null,'2','1','dg001','j003','9401023jang','서울시 서초구 kitri빌딩1층','02-225-1144');
insert into dept values('d005','시스템지원팀','1999/9/27',null,'2','1','dg001','j003','9401023jang','서울시 서초구 kitri빌딩2층','02-225-1155');
insert into dept values('d006','총무과','1999/9/27',null,'2','1','dg001','j004','9401023jang','서울시 서초구 kitri빌딩3층','02-225-1166');
insert into dept values('dg001','경영지원본부','1999/9/27',null,'1','1',null,'j004','9401023jang','서울시 서초구 kitri빌딩4층','02-225-1177');
insert into dept values('dg002','영업본부','1999/9/27',null,'1','1',null,'j001','9401023jang','서울시 서초구 kitri빌딩5층','02-225-1188');
insert into dept values('dg003','IT지원센터','1999/9/27',null,'1','1',null,'j003','9401023jang','서울시 서초구 kitri빌딩6층','02-225-1199');
insert into dept values('d007','교육부','1999/9/27',null,'2','1','dg001','j004','9401023jang','서울시 서초구 kitri빌딩6층','02-225-1100');
insert into dept values('d008','기획실','1999/9/27',null,'2','1','dg001','j004','9401023jang','서울시 서초구 kitri빌딩5층','02-225-1102');
insert into dept values('d009','영업1팀','1999/9/27',null,'2','1','dg001','j001','9401023jang','서울시 서초구 kitri빌딩8층','02-225-1222');
insert into dept values('d010','기업영업본부','1999/9/27',null,'2','1','dg001','j001','9401023jang','서울시 서초구 kitri빌딩9층','02-225-13331');
insert into dept values('d011','영업2팀','1999/9/27',null,'2','1','dg001','j001','9401023jang','서울시 서초구 kitri빌딩10층','02-225-1444');
insert into dept values('d012','마케팅실','1999/9/27',null,'2','1','dg001','j004','9401023jang','서울시 서초구 kitri빌딩10층','02-225-1555');
member테이블에 저장된 데이터 중 "92115kim"사용자는 "d003"부서이고 "d003"부서는 "j003"그룹이므로 "ROLE_ADMIN"에 해당하는 사용자입니다.
insert into member values('9401023jang','1234','장동건','731111-1111111','1973/11/11','1','0','부장','팀장','3급20호봉','1999/10/01',null,'d001','재직','222-222','서울시 봉천구','좋은동네','02-858-1111','02-858-1111','010-111-2222','jang@naver.com','jang.jpg');
insert into member values('0111022kim','1234','김범룡','800521-1111111','1980/09/01','1','0','과장','팀장','4급20호봉','2007/02/27',null,'d002','재직','222-222','서울시 봉천구','좋은동네','02-858-1111','02-858-1111','010-111-3333','kbr@naver.com','kbr.jpg');
insert into member values('92115kim','1234','김서연','901012-1111111','1990/11/11','1','1','과장','팀장','4급20호봉','2010/10/01',null,'d003','재직','222-222','서울시 봉천구','좋은동네','02-858-1111','02-858-1111','010-111-4444','jang@naver.com','kim.jpg');
insert into member values('881011kim','1234','김동현','721012-1111111','1990/11/11','1','1','과장','팀장','4급20호봉','2010/10/01',null,'d006','재직','222-222','서울시 봉천구','좋은동네','02-858-1111','02-858-1111','010-111-4444','jang@naver.com','kimdong.jpg');
insert into member values('787871lee','1234','이민호','721012-1111111','1990/11/11','1','1','대리','사원','4급20호봉','2010/10/01',null,'dg001','재직','222-222','서울시 봉천구','좋은동네','02-858-1111','02-858-1111','010-111-4444','jang@naver.com','leemin.jpg');
insert into member values('17171park','1234','박문수','721012-1111111','1990/11/11','1','1','대리','사원','4급20호봉','2010/10/01',null,'d0032','재직','222-222','서울시 봉천구','좋은동네','02-858-1111','02-858-1111','010-111-4444','jang@naver.com','park.jpg');
insert into member values('9871kim','1234','김어준','721012-1111111','1990/11/11','1','1','과장','팀장','4급20호봉','2010/10/01',null,'d009','재직','222-222','서울시 봉천구','좋은동네','02-858-1111','02-858-1111','010-111-4444','jang@naver.com','jjangkim.jpg');
insert into member values('lee0idjj','1234','안정환','721012-1111111','1990/11/11','1','1','차장','팀장','4급20호봉','2010/10/01',null,'dg002','재직','222-222','서울시 봉천구','좋은동네','02-858-1111','02-858-1111','010-111-4444','jang@naver.com','ansoccer.jpg');
insert into member values('djdiwjs','1234','차범근','721012-1111111','1990/11/11','1','1','사원','사원','4급20호봉','2010/10/01',null,'dg003','재직','222-222','서울시 봉천구','좋은동네','02-858-1111','02-858-1111','010-111-4444','jang@naver.com','chasoccer.jpg');
insert into member values('282djdid','1234','박지성','721012-1111111','1990/11/11','1','1','대리','파트장','4급20호봉','2010/10/01',null,'d001','재직','222-222','서울시 봉천구','좋은동네','02-858-1111','02-858-1111','010-111-4444','jang@naver.com','parksoccer.jpg');
insert into member values('Yeona1231','1234','김연아','721012-1111111','1990/11/11','1','1','대리','파트장','4급20호봉','2010/10/01',null,'d003','재직','222-222','서울시 봉천구','좋은동네','02-858-1111','02-858-1111','010-111-4444','jang@naver.com','parksoccer.jpg');
변경한 사용자의 권한 정보를 확인해보도록 하겠습니다.
select id, deptno, authority from member;
[코드 수정하기]
MemberDTO클래스를 열고 추가된 컬럼의 값을 저장할 수 있도록 멤버변수, setter/getter메소드를 추가합니다.
String authority;
public MemberDTO(String id, String pass, String name, String ssn, String birthday, String marry, String gender,
String position, String duty, String classes, Date startday, Date endday, String deptno, String curstate,
String zipcode, String addr, String detailaddr, String phonehome, String phoneco, String phonecell,
String email, String profile_photo, String deptname, MultipartFile userImage,
String authority) {
super();
this.id = id;
this.pass = pass;
this.name = name;
this.ssn = ssn;
this.birthday = birthday;
this.marry = marry;
this.gender = gender;
this.position = position;
this.duty = duty;
this.classes = classes;
this.startday = startday;
this.endday = endday;
this.deptno = deptno;
this.curstate = curstate;
this.zipcode = zipcode;
this.addr = addr;
this.detailaddr = detailaddr;
this.phonehome = phonehome;
this.phoneco = phoneco;
this.phonecell = phonecell;
this.email = email;
this.profile_photo = profile_photo;
this.deptname = deptname;
this.userImage = userImage;
this.authority = authority;
}
public String getAuthority() {
return authority;
}
public void setAuthority(String authority) {
this.authority = authority;
}
'보안 > Spring Security' 카테고리의 다른 글
실제 DB에서 인증하기 - step03 UserDetailsService커스트마이징 (3) | 2019.09.12 |
---|---|
실제 DB에서 인증하기 - step02 spring security 내부의 처리흐름 이해하기 (0) | 2019.09.11 |
[실습] 권한별로 접근 페이지 제어하기 - 스프링EL로 변경하기 (0) | 2019.09.10 |
[실습] 권한별로 접근 페이지 제어하기 - 일반적 방법 (0) | 2019.09.10 |
스프링의 EL표기식으로 권한 변경하기 (0) | 2019.09.10 |