<s:password name="password" ... value="(abcZyy" />。( ) 的密碼。(abcZyy(HTML 實體編碼)。Struts2 預設對表單輸入執行 HTML 編碼(防 XSS),將特殊字元轉為實體。密碼欄位同樣受影響,導致原始字元改變。
import org.apache.commons.text.StringEscapeUtils; // commons-text 1.9+
public class LoginAction extends ActionSupport {
private String password;
public void setPassword(String password) {
this.password = StringEscapeUtils.unescapeHtml4(password); // 還原實體
}
// ...
}
需依賴 org.apache.commons:commons-text。
password
<input type="password"> 繞過 Struts 標籤
原生 HTML 輸入不經 Struts 標籤處理,但需自行處理值回顯與 XSS 防護。
value 屬性留空,登入失敗時不回填密碼,避免洩露與編碼問題。MessageDigest.isEqual(hash1, hash2),防時序攻擊。