|
|
|
@ -13,18 +13,33 @@ import cokr.xit.base.syslog.ServiceLog;
|
|
|
|
|
import cokr.xit.foundation.AbstractComponent;
|
|
|
|
|
import cokr.xit.foundation.data.DataObject;
|
|
|
|
|
|
|
|
|
|
/**서비스 로그 필터.
|
|
|
|
|
* 서비스 로그의 저장여부를 반환하고, 필요할 경우 서비스 로그를 수정한다.
|
|
|
|
|
* @author mjkhan
|
|
|
|
|
*/
|
|
|
|
|
public class LogFilter extends AbstractComponent {
|
|
|
|
|
private PersonalInfo personalInfo = new PersonalInfo();
|
|
|
|
|
|
|
|
|
|
public boolean filter(ServiceLog svcLog) {
|
|
|
|
|
/**서비스 로그에 필터를 적용, 저장여부를 반환한다.
|
|
|
|
|
* 서비스 로그를 저장할 경우, 필요에 따라 서비스 로그의 필드를 수정한다.
|
|
|
|
|
* @param log 서비스 로그.
|
|
|
|
|
* @return 서비스 로그 저장여부
|
|
|
|
|
* <ul><li>저장할 경우 true</li>
|
|
|
|
|
* <li>그렇지 않으면 false</li>
|
|
|
|
|
* </ul>
|
|
|
|
|
*/
|
|
|
|
|
public boolean filter(ServiceLog log) {
|
|
|
|
|
for (Predicate<ServiceLog> filter: getFilters()) {
|
|
|
|
|
if (!filter.test(svcLog))
|
|
|
|
|
if (!filter.test(log))
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**서비스 로그 필터를 반환한다.
|
|
|
|
|
* @return 서비스 로그 필터
|
|
|
|
|
*/
|
|
|
|
|
protected List<Predicate<ServiceLog>> getFilters() {
|
|
|
|
|
ArrayList<Predicate<ServiceLog>> filters = new ArrayList<>();
|
|
|
|
|
|
|
|
|
@ -36,6 +51,13 @@ public class LogFilter extends AbstractComponent {
|
|
|
|
|
return filters;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**인증서비스 중 로그인/아웃일 경우 저장한다.
|
|
|
|
|
* @param log 서비스 로그
|
|
|
|
|
* @return 서비스 로그 저장여부
|
|
|
|
|
* <ul><li>저장할 경우 true</li>
|
|
|
|
|
* <li>그렇지 않으면 false</li>
|
|
|
|
|
* </ul>
|
|
|
|
|
*/
|
|
|
|
|
protected boolean authenticationFilter(ServiceLog log) {
|
|
|
|
|
if (!log.getClassName().contains("AuthenticationService"))
|
|
|
|
|
return true;
|
|
|
|
@ -50,6 +72,13 @@ public class LogFilter extends AbstractComponent {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**설정파일의 내용에 따라 필터를 적용한다.
|
|
|
|
|
* @param log 서비스 로그
|
|
|
|
|
* @return 서비스 로그 저장여부
|
|
|
|
|
* <ul><li>저장할 경우 true</li>
|
|
|
|
|
* <li>그렇지 않으면 false</li>
|
|
|
|
|
* </ul>
|
|
|
|
|
*/
|
|
|
|
|
protected boolean configuredFilter(ServiceLog log) {
|
|
|
|
|
String name = log.getClassName();
|
|
|
|
|
for (String exclude: ServiceLog.config().getExclude().getClasses()) {
|
|
|
|
@ -65,6 +94,24 @@ public class LogFilter extends AbstractComponent {
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**파일 다운로드 서비스에 필터를 적용한다. 다운로드 로그에는
|
|
|
|
|
* <ul><li>파일이름</li>
|
|
|
|
|
* <li>데이터 갯수</li>
|
|
|
|
|
* <li>파일에 포함된 모든 필드이름</li>
|
|
|
|
|
* <li>파일에 포함된 개인정보 필드이름</li>
|
|
|
|
|
* </ul>
|
|
|
|
|
* 등이 포함된다. 위 내용을 추출하기위해 ModelAndView에
|
|
|
|
|
* <ul><li>viewName은 'downloadView' 또는 'xlsView'</li>
|
|
|
|
|
* <li>파일이 사용한 데이터는 'downloadData'</li>
|
|
|
|
|
* <li>파일에 포함된 모든 필드이름은 'dataNames'</li>
|
|
|
|
|
* </ul>
|
|
|
|
|
* 로 설정한다.
|
|
|
|
|
* @param log 서비스 로그
|
|
|
|
|
* @return 서비스 로그 저장여부
|
|
|
|
|
* <ul><li>저장할 경우 true</li>
|
|
|
|
|
* <li>그렇지 않으면 false</li>
|
|
|
|
|
* </ul>
|
|
|
|
|
*/
|
|
|
|
|
protected boolean downloadFilter(ServiceLog log) {
|
|
|
|
|
Object returned = log.getReturned();
|
|
|
|
|
if (returned instanceof ModelAndView) {
|
|
|
|
@ -80,6 +127,11 @@ public class LogFilter extends AbstractComponent {
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**ModelAndView의 'downloadData'로 설정한 데이터에서
|
|
|
|
|
* 데이터 갯수, 포함된 모든 필드이름, 개인정보 필드이름들을 추출한다.
|
|
|
|
|
* @param log 서비스 로그
|
|
|
|
|
* @param model ModelAndView의 model
|
|
|
|
|
*/
|
|
|
|
|
protected void setDownloadData(ServiceLog log, Map<String, Object> model) {
|
|
|
|
|
Object obj = model.get("downloadData");
|
|
|
|
|
if (!(obj instanceof List)) return;
|
|
|
|
@ -103,6 +155,13 @@ public class LogFilter extends AbstractComponent {
|
|
|
|
|
log.setDataNames(model.get("dataNames"));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**커스텀 필터를 정의한다.
|
|
|
|
|
* @param log 서비스 로그
|
|
|
|
|
* @return 서비스 로그 저장여부
|
|
|
|
|
* <ul><li>저장할 경우 true</li>
|
|
|
|
|
* <li>그렇지 않으면 false</li>
|
|
|
|
|
* </ul>
|
|
|
|
|
*/
|
|
|
|
|
protected boolean customFilter(ServiceLog log) {
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|