Index: lams_admin/web/WEB-INF/web.xml =================================================================== diff -u -rae24f0804dbf85a1a8ecca3c2700be61de7ffdd7 -rea3eb45a90b898583f0846acd6cb113344863708 --- lams_admin/web/WEB-INF/web.xml (.../web.xml) (revision ae24f0804dbf85a1a8ecca3c2700be61de7ffdd7) +++ lams_admin/web/WEB-INF/web.xml (.../web.xml) (revision ea3eb45a90b898583f0846acd6cb113344863708) @@ -75,6 +75,10 @@ + SecurityLogFilter + org.lamsfoundation.lams.web.filter.SecurityLogFilter + + CSRFGuard org.owasp.csrfguard.CsrfGuardFilter @@ -92,6 +96,10 @@ /* + SecurityLogFilter + *.do + + CSRFGuard *.do Index: lams_build/conf/slim/standalone.xml =================================================================== diff -u -rc6a7f1bc8807e7a3c8ec9f5d1aa9d5fc72fe5d03 -rea3eb45a90b898583f0846acd6cb113344863708 --- lams_build/conf/slim/standalone.xml (.../standalone.xml) (revision c6a7f1bc8807e7a3c8ec9f5d1aa9d5fc72fe5d03) +++ lams_build/conf/slim/standalone.xml (.../standalone.xml) (revision ea3eb45a90b898583f0846acd6cb113344863708) @@ -113,6 +113,16 @@ + + + + + + + + + @@ -124,6 +134,10 @@ + + + @@ -234,6 +248,13 @@ + + + + + + + Index: lams_build/conf/standalone.xml =================================================================== diff -u -rc6a7f1bc8807e7a3c8ec9f5d1aa9d5fc72fe5d03 -rea3eb45a90b898583f0846acd6cb113344863708 --- lams_build/conf/standalone.xml (.../standalone.xml) (revision c6a7f1bc8807e7a3c8ec9f5d1aa9d5fc72fe5d03) +++ lams_build/conf/standalone.xml (.../standalone.xml) (revision ea3eb45a90b898583f0846acd6cb113344863708) @@ -141,6 +141,16 @@ + + + + + + + + + @@ -153,6 +163,10 @@ + + + @@ -263,6 +277,13 @@ + + + + + + + Index: lams_common/src/java/org/lamsfoundation/lams/web/filter/SecurityLogFilter.java =================================================================== diff -u --- lams_common/src/java/org/lamsfoundation/lams/web/filter/SecurityLogFilter.java (revision 0) +++ lams_common/src/java/org/lamsfoundation/lams/web/filter/SecurityLogFilter.java (revision ea3eb45a90b898583f0846acd6cb113344863708) @@ -0,0 +1,80 @@ +package org.lamsfoundation.lams.web.filter; + +import java.io.IOException; +import java.util.Map.Entry; + +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; + +import org.apache.log4j.Logger; +import org.lamsfoundation.lams.usermanagement.dto.UserDTO; +import org.lamsfoundation.lams.web.session.SessionManager; +import org.lamsfoundation.lams.web.util.AttributeNames; +import org.springframework.web.filter.OncePerRequestFilter; + +/** + * Logs requests to controllers with their parameters + * + * @author Marcin Cieslak + */ +public class SecurityLogFilter extends OncePerRequestFilter { + + private static final Logger log = Logger.getLogger(SecurityLogFilter.class); + + @Override + public void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) + throws IOException, ServletException { + try { + // look for user information + UserDTO user = SecurityLogFilter.getUserDto(); + StringBuilder logMessageBuilder = new StringBuilder(); + if (user == null) { + logMessageBuilder.append("Unauthenticated user "); + } else { + logMessageBuilder.append("\"").append(user.getLogin()).append("\" (").append(user.getUserID()) + .append(") "); + } + + // what path was called + logMessageBuilder.append("called ").append(request.getRequestURI()); + + // optional parameters + if (!request.getParameterMap().isEmpty()) { + logMessageBuilder.append(" with parameters: "); + for (Entry entry : request.getParameterMap().entrySet()) { + String key = entry.getKey(); + // skip CSRF parameter + if ("OWASP-CSRFGUARD".equals(key)) { + continue; + } + + // print out all parameters with their values + logMessageBuilder.append(key).append("=["); + String[] values = entry.getValue(); + if (values != null && values.length > 0) { + for (String value : entry.getValue()) { + logMessageBuilder.append(value).append(", "); + } + logMessageBuilder.delete(logMessageBuilder.length() - 2, logMessageBuilder.length()); + } + logMessageBuilder.append("], "); + } + logMessageBuilder.delete(logMessageBuilder.length() - 2, logMessageBuilder.length()); + } + + log.info(logMessageBuilder); + } catch (Exception e) { + log.error("Exception while logging to security log", e); + } + + chain.doFilter(request, response); + } + + private static UserDTO getUserDto() { + HttpSession ss = SessionManager.getSession(); + return (UserDTO) ss.getAttribute(AttributeNames.USER); + } +} \ No newline at end of file