Java web 어플리케이션에 로그인 설계 with spring framework
1. 기능 정의
- 로그인
- 사용자에게 아이디 패스워드를 받아서 로그인 한다.
- 로그인 이후 사용자를 메인 페이지로 이동시킨다.
- 로그아웃
- 사용자를 로그아웃 처리한다.
- 로그인 확인
- 로그인이 안되어 있는경우 로그인 페이지로 이동한다.
- 로그인이 되어 있는경우 접속을 허가 한다.
- 중복 로그인 방지
- 동일한 아이디로 로그인이 되어 있는 경우 기존 사용자의 접속을 종료 하고 로그인 한다.
- 로그인/로그아웃 이력 저장
- 로그인 이력 기록
- 로그아웃 이력 기록
- 동일 아이디 접속에 의한 로그아웃 이력 기록
- 세션 타임아웃에 의한 로그아웃 이력 기록 (옵션)
- 관리자에 의한 로그아웃 이력을 기록(옵션)
- 관리자 로그인/로그아웃 관리 기능 (옵션)
- 현재 로그인된 사용자 목록을 조회 한다.
- 로그인된 사용자를 로그아웃 시킨다.
2. 주요 기술 및 기능 구성
- Spring framework 기반으로 개발 한다.
- 브라우져와 서버와의 연동은 rest 방식을 사용한다.
- 로그인 확인 체크는 interceptor를 통해서 처리한다.
- 로그인한 사용자의 관리는 Manager 관리 객체를 만들고 Thread safe 하게 ConcurrentHashmap을 이용하여 처리 한다.
- 세션이 끝나는경우 로그아웃 처리를 위해서는 HttpSessionListener 를 구현해서 처리 한다.
- 자발적인 로그아웃이 아닌경우 로그아웃된 이유는 해당 세션에 넣어 준다.
3. 로그인/로그아웃 Case
- 로그인
- 사용자의 아이디/패스워드를 입력 후 로그인
- 로그 아웃
- 로그 아웃 기능을 통해 정상 로그아웃
- 로그인 된 상태에서 다른곳에서 동일한 아이디로 로그인
- 관리자 관리 기능으로 강제 로그 아웃
- 서버 장애/셧다운 (처리 불가)
4. 추가 기능
- 지정된 횟수만큼 로그인 실패시 로그인 잠금 기능(초기화 필요/일정시간동안 잠금)
- 자동입력 방지 기능
- 초기 비밀 번호 변경 기능
- 아이디 찾기
- 비밀번호 찾기
5. 보안 고려 사항
- 아이디는 6자 이상으로 한다.
- 패스워드는 대/소/숫자/특수 에서 3가지 이상의 조합으로 등록 하도록 한다.
- 로그인 실패 시 출력 멘트는 보안 이슈로 인해서 모호하게 출력해야 한다.
- ex> 아이디/패스워드가 잘못되었습니다.
6. 추가 사항
- 세션 타임 아웃에 의한 로그아웃 시키고 이력을 저장하는 부분은 리스너로 등록된 객체에서 스프링 bean 에 접근해야 하기 때문에 보류(가능은 하나 별의미가 없어서 보류 처리)
2016년 8월 2일 화요일
2015년 8월 2일 일요일
awk 로 프로세스 상태를 확인하는 스크립트 만들기
linux 에서 시스템의 프로세스를 모니터링하는 스크립트를 awk 를 이용하여 작성 하였습니다.
* script_path : 스크립트 패스가 있는 폴더를 설정하면 됩니다.
2. prop 파일(proc.prop)
* 첫번째 필드는 표시될 이름 입니다.
* 두번째 필드는 ps -ef 명령 실행시 찾을 문구 입니다.
3. awk 파일 ( disp.awk)
* 프로세스에서 지정된 키워드를 가진 프로세스의 숫자를 세서 보여 줍니다.
실행을 하면 다음과 같은 결과를 출력하게 됩니다.
shell 에서 prop 파일을 읽어서 awk 스크립트를 이용해서 처리하는 구조 입니다.
총 3개의 파일로 구성되어 있고 추가적인 기능이 필요 한경우 awk 스크립트에 구현을 하면 됩니다 .
1. shell 파일 (disp.sh)
#!/bin/bash
set SCRIPT_PATH = '/home/user/util/'
awk -f ${SCRIPT_PATH}disp.awk ${SCRIPT_PATH}proc.prop
* script_path : 스크립트 패스가 있는 폴더를 설정하면 됩니다.
2. prop 파일(proc.prop)
# Title processKey
tomcat tomcat
apache httpd
* 첫번째 필드는 표시될 이름 입니다.
* 두번째 필드는 ps -ef 명령 실행시 찾을 문구 입니다.
3. awk 파일 ( disp.awk)
#!/bin/awk
#
# This Program is display WEB status
BEGIN {
# width 66
pFormat = "%12s|%12s|%14s|%10s|%12s|\n";
pStar = "*****************************************************************"
pBar = "-----------------------------------------------------------------";
print "";
print pStar;
print "* Display WEB Applicatin Status *";
print pStar;
printf(pFormat ,"PROCESS", "PID", "START TIME", "COUNT", "STATUS");
print pBar;
}
# ROUTINE
{
#if ( $1 == "#" ) {
if ( $1 ~ /^#/ || $1 == "") {
# print "Skip....";
} else {
cmd = "ps -e -o pid,start,command |grep " $2 " | grep -v grep" ;
#system(cmd) | getline psResult;
count = 0;
while (cmd | getline line) {
# print line;
split (line , res, " ");
if (count == 0 ) {
pid = res[1];
sTime = res[2];
}
count++;
}
close(cmd)
status= " \033[1;31mUNKNOWN\033[0m";
if( count > 0 ) {
status = "ALIVE";
}
printf(pFormat , $1, pid, sTime, count, status);
}
}
END {
print pBar;
print pStar;
print "";
}
* 프로세스에서 지정된 키워드를 가진 프로세스의 숫자를 세서 보여 줍니다.
실행을 하면 다음과 같은 결과를 출력하게 됩니다.
*************************************************************
* Display WEB Applicatin Status *
*************************************************************
PROCESS| PID| START TIME| COUNT| STATUS|
-------------------------------------------------------------
tomcat| | | 0| UNKNOWN|
apache| 37| 5:39PM| 113| ALIVE|
-------------------------------------------------------------
*************************************************************
프로세스의 상태와 개수및 시작 시간 그리고 하나도 발견이 안되는 경우 붉은 글씨로 UNKNOWN 으로 표시 하게 됩니다.
피드 구독하기:
글 (Atom)