在 execute() 中直接判斷 "a".equals(username) 永遠返回 error,但提取為單獨方法 isa() 再調用卻正常。
// 失效版
public String execute() {
if ("a".equals(username)) return "success";
else return "error";
}
// 生效版
public boolean isa() { return "a".equals(username); }
public String execute() {
if (isa()) return "success";
else return "error";
}
execute() 前會通過 OGNL 設置 username,但若存在同名局部變量或攔截器干擾,可能導致 execute() 內直接訪問字段時值為 null。public boolean isa 字段及 isa() 方法,可能導致 OGNL 誤綁定。trim()。始終使用 getUsername() 獲取值,避免直接訪問字段;排查攔截器棧配置;打印 username 長度及字符碼調試。