요소기술 - 이중등록(Double Submit) 방지

개요

새로고침 등의 중복 request 호출 시 등록 처리 등에 대한 이중 등록을 방지하는 기능을 제공한다.

설명

세션을 통해 고유한 token을 보관하고 해당 token을 파라미터와 비교함으로서 중복 처리를 방지한다.

관련소스
유형대상소스설명비고
Utilegovframework.com.cmm.util.EgovDoubleSubmitHelper.java중복 방지 처리 관련 유틸리티
TagSupportegovframework.com.cmm.taglibs.DoubleSubmitTag.javaTag class
tld/WEB-INF/META-INF/double-submit.tldtld(tag library description) 파일

환경설정

해당없음

사용방법

우선 등록화면 및 수정화면의 JSP에 다음과 같은 taglib를 적용한다.

<%@ taglib prefix="double-submit" uri="http://www.egovframe.go.kr/tags/double-submit/jsp" %>
...
 
<form ...>
    <double-submit:preventer/>
</form>

이렇게 되면 세션에 고유 UUID 정보를 생성한 후에 파라미터로 해당 UUID 값을 기록한다.

다음으로 Controller의 각 메소드에 실제 Service를 호출하는 부분을 다음과 같이 변경한다.

* 변경 전

if (isAuthenticated) {
    notification.setFrstRegisterId(user.getUniqId());
 
    notificationService.insertNotificationInf(notification);
 
}

* 변경 후

if (isAuthenticated) {
    notification.setFrstRegisterId(user.getUniqId());
 
    if (EgovDoubleSubmitHelper.checkAndSaveToken()) {  
        notificationService.insertNotificationInf(notification);
    }
}

EgovDoubleSubmitHelper.checkAndSaveToken() 메소드에서 내부적으로 현재 기록된 세션상의 UUID와 파라미터의 UUID 값이 같은지 비교 후, 동일한 경우 새로운 UUID를 세션 상에 기록한 후 return true로 처리된다. 새로운 UUID가 세션에 변경되었기 때문에 동일한 request가 재 호출시 세션의 UUID와 이전 파라미터의 UUID 값이 다르기 때문에 return false로 처리되어 실제 등록 처리 등을 생략할 수 있다.

사용방법 (여러 화면으로 접근되는 경우)

위의 방식은 세션을 사용하기 때문에 하나의 웹 시스템을 여러 브라우저로 동시에 사용하는 경우 동일한 세션 ID로 인하여 서로 간섭될 수 있다.

이 경우 다음과 같은 방식으로 token key를 지정함으로써 간섭을 회피할 수 있다. (동일한 업무를 접근하는 경우는 원칙적으로 회피 불가)

<%@ taglib prefix="double-submit" uri="http://www.egovframe.go.kr/tags/double-submit/jsp" %>
...
 
<form ...>
    <double-submit:preventer tokenKey="someKey"/>
</form>
if (isAuthenticated) {
    notification.setFrstRegisterId(user.getUniqId());
 
    if (EgovDoubleSubmitHelper.checkAndSaveToken("someKey")) {  
        notificationService.insertNotificationInf(notification);
    }
}

참고자료

해당없음

 
egovframework/com/v3/cmm/doublesubmit.txt · 마지막 수정: 2023/12/21 05:21 (외부 편집기)
 
이 위키의 내용은 다음의 라이센스에 따릅니다 :CC Attribution-Noncommercial-Share Alike 3.0 Unported
전자정부 표준프레임워크 라이센스(바로가기)

전자정부 표준프레임워크 활용의 안정성 보장을 위해 위험성을 지속적으로 모니터링하고 있으나, 오픈소스의 특성상 문제가 발생할 수 있습니다.
전자정부 표준프레임워크는 Apache 2.0 라이선스를 따르고 있는 오픈소스 프로그램입니다. Apache 2.0 라이선스에 따라 표준프레임워크를 활용하여 발생된 업무중단, 컴퓨터 고장 또는 오동작으로 인한 손해 등에 대해서 책임이 없습니다.
Recent changes RSS feed CC Attribution-Noncommercial-Share Alike 3.0 Unported Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki