목차

공통컴포넌트 커스터마이징

사용자 IP 사용 관련

공통컴포넌트 중 일부는 사용자 IP를 사용합니다. (ex: 접속로그관리, 웹로그관리 등)

일부는 Presentation Layer를 통해 IP를 직접 얻을 수 있으나 일부는 Presentation Layer를 사용할 수 없는 경우 사용자 로그인 정보(SecurityContext)를 통해 IP를 활용합니다.

이때 사용자 IP에 대한 정보를 취득하기 위해서는 다음과 같은 Interceptor 등록이 필요합니다.

package egovframework.com.cmm.interceptor;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
 
import egovframework.com.cmm.LoginVO;
import egovframework.com.cmm.util.EgovUserDetailsHelper;
 
public class IpObtainInterceptor extends HandlerInterceptorAdapter {
 
	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
 
		String clientIp = request.getRemoteAddr();
 
		LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
 
		if (loginVO != null) {
			loginVO.setIp(clientIp);
		}
 
		return true;
	}
}

설정은 interceptor 등록을 위해 다음과 같인 설정이 추가됩니다. (ex: egov-com-servlet.xml)

	<!-- IP 정보 기록 -->
	<bean id="IpObtainInterceptor" class="egovframework.com.cmm.interceptor.IpObtainInterceptor" />
 
	<bean id="selectAnnotaionMapper" class="egovframework.rte.ptl.mvc.handler.SimpleUrlAnnotationHandlerMapping" p:order="1">
		<property name="interceptors">
			<list>
				<ref local="IpObtainInterceptor" />
			</list>
		</property>
		<property name="urls">
			<set>
				<value>/**/*.do</value>
			</set>
		</property>
	</bean>

파일삭제 관련

공통컴포넌트에서 파일 삭제시 실제 물리적인 파일은 삭제되지 않으며,

또한 DB에서 COMTNFILE 테이블에 USE_YN 컬럼을 'N'으로 변경하고 있고, COMTNFILEDETAIL 테이블에 컬럼은 삭제되지 않는다.

실제 물리적인 파일 삭제를 하기 위해서는 EgovFileMngServiceImpl.java 파일을 수정하여야 한다.

1) 파일 하나 삭제시(예시)

    /**
     * 하나의 파일을 삭제한다.
     * 
     * @see egovframework.com.cmm.service.EgovFileMngService#deleteFileInf(egovframework.com.cmm.service.FileVO)
     */
    public void deleteFileInf(FileVO fvo) throws Exception {
	FileVO file = fileMngDAO.selectFileInf(fvo);
	fileMngDAO.deleteFileInf(fvo);
 
	// 실제 파일 삭제
	File target = new File(file.getFileStreCours() + file.getStreFileNm());
	target.delete();
    }

2) 게시물 삭제시(예시)

    /**
     * 전체 파일을 삭제한다.
     * 
     * @see egovframework.com.cmm.service.EgovFileMngService#deleteAllFileInf(egovframework.com.cmm.service.FileVO)
     */
    public void deleteAllFileInf(FileVO fvo) throws Exception {
	List<FileVO> fvoList = fileMngDAO.selectFileInfs(fvo);
	fileMngDAO.deleteAllFileInf(fvo);
 
	// 실제 파일 삭제
	Iterator iter = fvoList.iterator();
	FileVO vo;
	while (iter.hasNext()) {
	    vo = (FileVO)iter.next();
 
		FileVO file = fileMngDAO.selectFileInf(vo);
 
		File target = new File(file.getFileStreCours() + file.getStreFileNm());
		target.delete();
		}
    }