package com.demo.action; import com.opensymphony.xwork2.ActionSupport; import org.apache.struts2.interceptor.SessionAware; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.Map; public class LoginAction extends ActionSupport implements SessionAware { public static final String SESSION_USER = "demoUser"; public static final String SESSION_ROLE = "demoRole"; public static final String SESSION_LOGIN_TIME = "demoLoginTime"; private static final DateTimeFormatter TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); private Map session; private String username; private String password; private String displayName; private String loginTime; @Override public String execute() { username = normalize(username); password = normalize(password); if (!hasSubmitted()) { return INPUT; } if ("admin".equals(username) && "123456".equals(password)) { displayName = "ops-admin"; loginTime = LocalDateTime.now().format(TIME_FORMATTER); session.put(SESSION_USER, displayName); session.put(SESSION_ROLE, "admin"); session.put(SESSION_LOGIN_TIME, loginTime); return SUCCESS; } addActionError("演示账号或密码不正确,请使用 admin / 123456。/ Invalid demo credentials. Use admin / 123456."); return INPUT; } @Override public void validate() { if (!hasSubmitted()) { return; } if (username == null || username.length() < 3) { addFieldError("username", "用户名至少 3 个字符。/ Username must be at least 3 characters."); } if (password == null || password.length() < 6) { addFieldError("password", "密码至少 6 个字符。/ Password must be at least 6 characters."); } } private boolean hasSubmitted() { return (username != null && !username.trim().isEmpty()) || (password != null && !password.trim().isEmpty()); } private String normalize(String value) { return value == null ? null : value.trim(); } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getDisplayName() { return displayName; } public String getLoginTime() { return loginTime; } @Override public void setSession(Map session) { this.session = session; } }