목차

요소기술 - 위지위그 에디터(WYSIWYG Editor)

개요

다양한 위지위그 에디터에 대한 요구에 따라 Htmlarea 이외에 새로운 에디터를 제공한다.
게시판, 자료실의 메모장에서 사용자가 자유롭게 컨텐츠를 편집할 수 있는 기능의 컴포넌트을 제공한다.
텍스트 및 HTML 편집 기능을 지원하고, 이미지 업로드 및 이미지를 편집기에 보여주는 기능이 있어야 한다.
웹 에디터는 웹 브라우저에서 게시판, 공지사항, 자료실, 사진첩과 같이 입력기능이 있는 곳에서 사용할 수 있다.

본 기능은 전자정부 표준프레임워크 공통컴포넌트 요소기술 내에 구성되어 있다.

설명

오픈소스인 CKEditor를

관련소스
유형대상소스설명비고
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);
    }
}

참고자료

CKEditor