diff --git a/src/main/java/org/codelibs/fess/app/web/base/FessAdminAction.java b/src/main/java/org/codelibs/fess/app/web/base/FessAdminAction.java index 8191ea82f..2da5a9274 100644 --- a/src/main/java/org/codelibs/fess/app/web/base/FessAdminAction.java +++ b/src/main/java/org/codelibs/fess/app/web/base/FessAdminAction.java @@ -23,6 +23,7 @@ import org.codelibs.core.beans.util.BeanUtil; import org.codelibs.core.beans.util.CopyOptions; import org.codelibs.core.lang.StringUtil; import org.codelibs.fess.exception.UserRoleLoginException; +import org.codelibs.fess.util.ActivityUtil; import org.dbflute.optional.OptionalThing; import org.lastaflute.di.util.LdiFileUtil; import org.lastaflute.web.login.LoginManager; @@ -39,8 +40,6 @@ import org.slf4j.LoggerFactory; */ public abstract class FessAdminAction extends FessBaseAction { - private static final Logger auditLogger = LoggerFactory.getLogger("fess.log.audit"); - // =================================================================================== // Attribute // ========= @@ -102,18 +101,10 @@ public abstract class FessAdminAction extends FessBaseAction { @Override public ActionResponse hookBefore(ActionRuntime runtime) { - final String client = LaRequestUtil.getOptionalRequest().map(req -> { - final String value = req.getHeader("x-forwarded-for"); - if (StringUtil.isNotBlank(value)) { - return value; - } else { - return req.getRemoteAddr(); - } - }).orElse("-"); final String username = getUserBean().map(u -> u.getUserId()).orElse("-"); final String requestPath = runtime.getRequestPath(); final String executeName = runtime.getExecuteMethod().getName(); - auditLogger.info("{} {} {} {}", client, username, requestPath, executeName); + ActivityUtil.access(username, requestPath, executeName); return super.hookBefore(runtime); } diff --git a/src/main/java/org/codelibs/fess/app/web/login/LoginAction.java b/src/main/java/org/codelibs/fess/app/web/login/LoginAction.java index 831fad032..9f3a8ff2b 100644 --- a/src/main/java/org/codelibs/fess/app/web/login/LoginAction.java +++ b/src/main/java/org/codelibs/fess/app/web/login/LoginAction.java @@ -18,6 +18,7 @@ package org.codelibs.fess.app.web.login; import org.codelibs.fess.app.web.admin.dashboard.AdminDashboardAction; import org.codelibs.fess.app.web.base.FessSearchAction; import org.codelibs.fess.mylasta.action.FessUserBean; +import org.codelibs.fess.util.ActivityUtil; import org.lastaflute.web.Execute; import org.lastaflute.web.login.exception.LoginFailureException; import org.lastaflute.web.response.HtmlResponse; @@ -51,11 +52,12 @@ public class LoginAction extends FessSearchAction { form.clearSecurityInfo(); return asHtml(path_Login_IndexJsp); }); - final String email = form.username; + final String username = form.username; final String password = form.password; form.clearSecurityInfo(); + ActivityUtil.login(username); try { - return fessLoginAssist.loginRedirect(email, password, op -> {}, () -> getHtmlResponse()); + return fessLoginAssist.loginRedirect(username, password, op -> {}, () -> getHtmlResponse()); } catch (final LoginFailureException lfe) { throwValidationError(messages -> messages.addErrorsLoginError(GLOBAL), () -> { return asHtml(path_Login_IndexJsp); diff --git a/src/main/java/org/codelibs/fess/app/web/logout/LogoutAction.java b/src/main/java/org/codelibs/fess/app/web/logout/LogoutAction.java index 8719f1aa9..5b1f4d43b 100644 --- a/src/main/java/org/codelibs/fess/app/web/logout/LogoutAction.java +++ b/src/main/java/org/codelibs/fess/app/web/logout/LogoutAction.java @@ -17,6 +17,7 @@ package org.codelibs.fess.app.web.logout; import org.codelibs.fess.app.web.base.FessSearchAction; import org.codelibs.fess.app.web.login.LoginAction; +import org.codelibs.fess.util.ActivityUtil; import org.lastaflute.web.Execute; import org.lastaflute.web.response.HtmlResponse; @@ -40,6 +41,8 @@ public class LogoutAction extends FessSearchAction { @Execute public HtmlResponse index() { + final String username = getUserBean().map(u -> u.getUserId()).orElse("-"); + ActivityUtil.logout(username); fessLoginAssist.logout(); return redirect(LoginAction.class); } diff --git a/src/main/java/org/codelibs/fess/util/ActivityUtil.java b/src/main/java/org/codelibs/fess/util/ActivityUtil.java index 20f916149..4fd7b0896 100644 --- a/src/main/java/org/codelibs/fess/util/ActivityUtil.java +++ b/src/main/java/org/codelibs/fess/util/ActivityUtil.java @@ -15,9 +15,14 @@ */ package org.codelibs.fess.util; +import java.time.LocalDateTime; +import java.time.ZonedDateTime; +import java.time.format.DateTimeFormatter; + import javax.servlet.http.HttpServletRequest; import org.codelibs.core.lang.StringUtil; +import org.lastaflute.web.util.LaRequestUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -26,30 +31,63 @@ import org.slf4j.LoggerFactory; * */ public class ActivityUtil { - private static Logger logger = LoggerFactory.getLogger("activity"); + private static Logger logger = LoggerFactory.getLogger("fess.log.audit"); - public static void login(final String username, final HttpServletRequest request) { - log(Action.LOGIN, username + ' ' + getRemoteAddr(request)); + public static void login(final String username) { + final StringBuilder buf = new StringBuilder(100); + buf.append("action:"); + buf.append(Action.LOGIN); + buf.append('\t'); + buf.append("user:"); + buf.append(username); + log(buf); } - public static void logout(final String username, final HttpServletRequest request) { - log(Action.LOGOUT, username + ' ' + getRemoteAddr(request)); + public static void logout(final String username) { + final StringBuilder buf = new StringBuilder(100); + buf.append("action:"); + buf.append(Action.LOGOUT); + buf.append('\t'); + buf.append("user:"); + buf.append(username); + log(buf); } - public static void access(final String username, final HttpServletRequest request) { - log(Action.ACCESS, username + ' ' + getRemoteAddr(request) + ' ' + request.getRequestURL()); + public static void access(final String username, final String path, final String execute) { + final StringBuilder buf = new StringBuilder(100); + buf.append("action:"); + buf.append(Action.ACCESS); + buf.append('\t'); + buf.append("user:"); + buf.append(username); + buf.append('\t'); + buf.append("path:"); + buf.append(path); + buf.append('\t'); + buf.append("execute:"); + buf.append(execute); + log(buf); } - protected static void log(final Action action, final String msg) { - logger.info("[" + action + "] " + msg); + private static void log(final StringBuilder buf) { + buf.append('\t'); + buf.append("ip:"); + buf.append(getClientIp()); + buf.append('\t'); + buf.append("time:"); + buf.append(DateTimeFormatter.ISO_INSTANT.format(ZonedDateTime.now())); + logger.info(buf.toString()); } - protected static String getRemoteAddr(final HttpServletRequest request) { - final String clientIp = request.getHeader("x-forwarded-for"); - if (StringUtil.isNotBlank(clientIp)) { - return clientIp; - } - return request.getRemoteAddr(); + protected static String getClientIp() { + return LaRequestUtil.getOptionalRequest().map(req -> { + final String value = req.getHeader("x-forwarded-for"); + if (StringUtil.isNotBlank(value)) { + return value; + } else { + return req.getRemoteAddr(); + } + }).orElse("-"); } protected enum Action { diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml index 07a9dc4e3..583530deb 100644 --- a/src/main/resources/logback.xml +++ b/src/main/resources/logback.xml @@ -8,7 +8,7 @@ - +