diff --git a/gms/src/main/java/it/inaf/ia2/gms/authn/JWTFilter.java b/gms/src/main/java/it/inaf/ia2/gms/authn/JWTFilter.java index ce21e9c20220822eecb590295bd6fefb0ee0b23f..6847193fc2f51ae3fddc689992ce746b0cdd3d97 100644 --- a/gms/src/main/java/it/inaf/ia2/gms/authn/JWTFilter.java +++ b/gms/src/main/java/it/inaf/ia2/gms/authn/JWTFilter.java @@ -33,7 +33,7 @@ public class JWTFilter implements Filter { String authHeader = request.getHeader("Authorization"); if (authHeader == null) { - loggingDAO.logAction("Attempt to access WS without token"); + loggingDAO.logAction("Attempt to access WS without token", request); response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Missing Authorization token"); return; } @@ -42,7 +42,7 @@ public class JWTFilter implements Filter { OAuth2AccessToken accessToken = jwkTokenStore.readAccessToken(authHeader); if (accessToken.isExpired()) { - loggingDAO.logAction("Attempt to access WS with expired token"); + loggingDAO.logAction("Attempt to access WS with expired token", request); response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Access token is expired"); return; } @@ -50,13 +50,13 @@ public class JWTFilter implements Filter { Map<String, Object> claims = accessToken.getAdditionalInformation(); if (claims.get("sub") == null) { - loggingDAO.logAction("Attempt to access WS with invalid token"); + loggingDAO.logAction("Attempt to access WS with invalid token", request); response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Invalid access token: missing sub claim"); return; } ServletRequestWithJWTPrincipal wrappedRequest = new ServletRequestWithJWTPrincipal(request, claims); - loggingDAO.logAction("WS access from " + wrappedRequest.getUserPrincipal().getName()); + loggingDAO.logAction("WS access from " + wrappedRequest.getUserPrincipal().getName(), request); fc.doFilter(wrappedRequest, res); } diff --git a/gms/src/main/java/it/inaf/ia2/gms/persistence/LoggingDAO.java b/gms/src/main/java/it/inaf/ia2/gms/persistence/LoggingDAO.java index ae23d57b9127831a17322cc876f22f2f929d24f3..b236ec757a2409c704db0aa9897b2c5d1ccc0e05 100644 --- a/gms/src/main/java/it/inaf/ia2/gms/persistence/LoggingDAO.java +++ b/gms/src/main/java/it/inaf/ia2/gms/persistence/LoggingDAO.java @@ -18,7 +18,7 @@ public class LoggingDAO { private final JdbcTemplate jdbcTemplate; - @Autowired + @Autowired(required = false) private HttpServletRequest request; @Autowired @@ -53,15 +53,19 @@ public class LoggingDAO { } public void logAction(String action) { + logAction(action, request); + } + + public void logAction(String action, HttpServletRequest request) { try { String sql = "INSERT INTO audit_log (\"user\", action, ip_address) VALUES (?, ?, ?)"; jdbcTemplate.update(conn -> { PreparedStatement ps = conn.prepareStatement(sql); int i = 0; - ps.setString(++i, getUser()); + ps.setString(++i, getUser(request)); ps.setString(++i, action); - ps.setString(++i, getIPAddress()); + ps.setString(++i, getIPAddress(request)); return ps; }); } catch (Throwable t) { @@ -69,7 +73,7 @@ public class LoggingDAO { } } - private String getIPAddress() { + private String getIPAddress(HttpServletRequest request) { String ipAddress = request.getHeader("X-FORWARDED-FOR"); if (ipAddress == null) { return request.getRemoteAddr(); @@ -78,7 +82,7 @@ public class LoggingDAO { } } - private String getUser() { + private String getUser(HttpServletRequest request) { if (request.getUserPrincipal() != null) { return request.getUserPrincipal().getName(); }