前端修复,日志功能加入

This commit is contained in:
Zzzz
2026-04-28 18:26:28 +08:00
parent dc192e8223
commit cc32c222a4
35 changed files with 874 additions and 132 deletions
@@ -8,6 +8,7 @@ import com.mzh.library.service.impl.AuthServiceImpl;
import com.mzh.library.util.SessionAttributes;
import java.io.IOException;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
@@ -16,6 +17,7 @@ import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class LoginServlet extends HttpServlet {
private static final Logger LOGGER = Logger.getLogger(LoginServlet.class.getName());
private static final String LOGIN_JSP = "/WEB-INF/jsp/auth/login.jsp";
private static final String DASHBOARD_PATH = "/dashboard";
private static final int SESSION_TIMEOUT_SECONDS = 30 * 60;
@@ -40,9 +42,13 @@ public class LoginServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = trim(request.getParameter("username"));
String submittedUsername = request.getParameter("username");
String username = trim(submittedUsername);
String password = request.getParameter("password");
String redirect = safeRedirect(request.getParameter("redirect"));
String submittedRedirect = request.getParameter("redirect");
String redirect = safeRedirect(submittedRedirect);
logLoginPost(request, submittedUsername, username, password, submittedRedirect, redirect);
AuthenticationResult result = authService.authenticate(username, password);
if (!result.isAuthenticated()) {
@@ -57,6 +63,26 @@ public class LoginServlet extends HttpServlet {
response.sendRedirect(resolveRedirect(request, redirect));
}
private void logLoginPost(
HttpServletRequest request,
String submittedUsername,
String username,
String password,
String submittedRedirect,
String redirect
) {
LOGGER.info("Login POST reached"
+ " remoteAddr=" + safeLogValue(request.getRemoteAddr())
+ " contextPath=" + safeLogValue(request.getContextPath())
+ " redirectSubmitted=" + !trim(submittedRedirect).isEmpty()
+ " redirectAccepted=" + !redirect.isEmpty()
+ " usernameSubmitted=" + (submittedUsername != null)
+ " usernameLength=" + length(submittedUsername)
+ " normalizedUsernameLength=" + username.length()
+ " usernameNormalizedChanged=" + !username.equals(nullToEmpty(submittedUsername))
+ " passwordSubmitted=" + (password != null));
}
private boolean isAuthenticated(HttpServletRequest request) {
HttpSession session = request.getSession(false);
return session != null && session.getAttribute(SessionAttributes.AUTHENTICATED_USER) != null;
@@ -97,4 +123,29 @@ public class LoginServlet extends HttpServlet {
private String trim(String value) {
return value == null ? "" : value.trim();
}
private int length(String value) {
return value == null ? 0 : value.length();
}
private String nullToEmpty(String value) {
return value == null ? "" : value;
}
private String safeLogValue(String value) {
if (value == null) {
return "";
}
StringBuilder builder = new StringBuilder();
int limit = Math.min(value.length(), 120);
for (int i = 0; i < limit; i++) {
char current = value.charAt(i);
builder.append(Character.isISOControl(current) ? '?' : current);
}
if (value.length() > limit) {
builder.append("...");
}
return builder.toString();
}
}