728x90
반응형
SMALL
패스워드 5회 잠금 연습
반응형
LoginVO
//LoginVO
public class LoginVO extends UserVO {
//로그인 5회실패 일자
private int FailLastDt=0;
//로그인 실패 횟수
private int PwErrorCnt =0;
public int getPwErrorCnt() {
return PwErrorCnt;
}
public void setPwErrorCnt(int pwErrorCnt) {
PwErrorCnt = pwErrorCnt;
}
public int getFailLastDt() {
return FailLastDt;
}
public void setFailLastDt(int failLastDt) {
FailLastDt = failLastDt;
}
}
728x90
Controller
// controller 부분
@RequestMapping("")//Mapping값을 입력 해주세요.
public ModelAndView loginCheck(@ModelAttribute("loginVO") LoginVO loginVO, HttpServletRequest request, HttpServletResponse response, ModelMap model) throws BaseException {
//로그인 성공로직~
{
//로그인 성공로직 추가~
}
//조건
LoginVO lvo = loginService.view(loginVO);//로그인 정보 및 실패 횟수 실패날짜 조회
boolean loginlock =true;
if(lvo != null ){
loginlock = loginlock(request,lvo);
}
if(loginlock) {
//로그인 5회이상 실패 잠금시간이 지나지 않았을경우
if(lvo != null && lvo.getPwErrorCnt() > 4) {
//실패 처리 부분
int mm = (600)/60 -(lvo.getFailLastDt()/60) ; //로그인 실패 일자와 -10분 남은시간 구하기
("message", egovMessageSource.getMessage("")+mm+"분 뒤 다시 시도해주세요.");// 실패 메세지 부분
}else{
//로그인 페이지로 이동
}else{
("message", egovMessageSource.getMessage(""));// 실패 메세지 부분
//로그인 실패 기록하는 class 호출
LoginLog lgl = new LoginLog();
lgl.setLog(request, loginlock, userId, loginVO.getUserPw());//다시 실패횟수를 늘려주기위한 로직
}
public boolean loginlock(HttpServletRequest request,LoginVO lvo) throws BaseException {
int max =600; //10분
if(lvo.getFailLastDt() >= max) {
lvo.setPwErrorCnt(0); //10분 초과시 0으로 update
loginService.updatePwErrorCnt(lvo);
}else {
}
return true;
}
/** 로그인 실패 기록
*/
class LoginLog {
// 로그 실패 기록
public void setLog(HttpServletRequest request, boolean loginlock, String userId, String userPw) {
// 1. 사용자 검사
LoginVO loginVO = new LoginVO();
loginVO.setUserId(userId);
loginVO.setuserPw(userPw);
//loginlock ture 계정이 잠겨있지 않을경우
if(loginlock){
LoginVO lvo = loginService.view(loginVO);
if(lvo == null){
//메세지 부분 ("사용자 정보가 없습니다.");
}else if(lvo != null && !userPw.equals(lvo.getUserPw())){
// 패스워드 오류 횟수 증가
lvo.setPwErrorCnt(lvo.getPwErrorCnt()+1);
loginService.updatePwErrorCnt(lvo);
//메세지 부분 ("비밀번호 5회이상 틀릴경우 10분간 계정이 잠깁니다.");
}
}else{
//로그인 정책의 맞게 예외의 경우를 메세지를 추가해주면됩니다.
}
//실패 log를 남기려면 여기서 추가해주시면 됩니다.
}
SMALL
Service >> Impl >> Mapper
//service
public int updateUserPw(LoginVO entity) throws BaseException;
public int updatePwErrorCnt(LoginVO entity) throws BaseException;
//Impl
public int updatePwErrorCnt(LoginVO entity) throws BaseException {
return mapper.updatePwErrorCnt(entity);
}
public int updateUserPw(LoginVO entity) throws BaseException {
return mapper.updateUserPw(entity);
}
//mapper
public int updateUserPw(LoginVO entity) throws BaseException;
public int updatePwErrorCnt(LoginVO entity) throws BaseException;
Mapper.xml
//oracle
SELECT
--로그인 관련 컬럼
,(SYSDATE-A.FAIL_LAST_DT)* 24 * 60 * 60 FAIL_LAST_DT //현재 날짜와 실패날짜 초단위로 가져오기
FROM [유저테이블]
WHERE USER_ID = #{유저id로조회}
UPDATE [유저테이블] SET
PW_ERROR_CNT = #{pwErrorCnt}
<if test='pwErrorCnt > 4 ' > //4회이상 틀릴경우에 현재시간으로 UPDATE
,FAIL_LAST_DT =SYSDATE
</if>
WHERE USER_ID = #{유저id로조회}
Oracle 유저테이블 컬럼 추가
FailLastDt : Number(10,0)
PwErrorCnt : DATE
728x90
반응형
LIST
'보안' 카테고리의 다른 글
OWASP (Open Web Application Security Project) (0) | 2023.02.22 |
---|---|
[정보 보안]CSRF 대응방안 (0) | 2023.02.22 |
[정보보안] javascript 난독화 Uglify.JS (0) | 2023.02.22 |
버프스위트(Burp suite) 설치 및 실행 (0) | 2023.01.31 |
댓글