身份验证属于行动,而不是验证,IMO。
我可能会考虑对字段本身使用 XML 或注释验证并将登录尝试放入 中validate()
,但代码很小,无论哪种方式我都会很舒服。
public String execute() {
if (userService.loginValid(username, password) {
return SUCCESS;
}
addActionError(getText("login.failure"));
return FAILURE;
}
我会使用框架对动作级错误消息的支持而不是使用标志(如果我这样做了,我不会将该标志与本地重复),并且我强烈建议使用可以注入的东西来执行实际登录使测试更容易。
使用该validate()
方法使事情变得非常紧凑:
public void validate() {
if (!userService.loginValid(username, password)) {
addActionError(getText("login.failure"));
}
}
假设您定义了合理的“输入”和“成功”结果,这可能就是您所需要的。如果看代码的开发者熟悉框架,validate()
版本就比较清晰了。
如果您对使用 XML 或注释验证不感兴趣,也可以手动进行。这绝对属于validate()
,对于像这样的常用实用方法,静态导入使代码仍然相对简洁:
public void validate() {
boolean tryLogin = true;
if (isBlank(username)) {
addFieldError("username", getText("login.username.required"));
tryLogin = false;
}
if (isBlank(password)) {
addFieldError("password", getText("login.password.required"));
tryLogin = false;
}
if (tryLogin && !userService.loginValid(username, password)) {
addActionError(getText("login.failure"));
}
}
(我添加了tryLogin
标志以避免看到明显会失败的登录错误消息,尽管这也可以通过其他方式处理。登录后处理省略了。)