在我的 web.xml 中有这个:
<security-constraint>
<display-name>Amministrazione</display-name>
<web-resource-collection>
<web-resource-name>wrcollAdmin</web-resource-name>
<description/>
<url-pattern>/admin/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<description/>
<role-name>admin</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>FORM</auth-method>
<form-login-config>
<form-login-page>/login.htm</form-login-page>
<form-error-page>/login.htm</form-error-page>
</form-login-config>
</login-config>
允许我保护我的 webapp 的安全区域。
例如,我被重定向到 /login.htm 试图访问 /admin/page.htm 。
然后我有一个 JSF2 表单,其中包含用户名和密码的输入字段。登录按钮触发控制器中的“login()”方法,例如:
public void login() throws IOException {
FacesContext context = FacesContext.getCurrentInstance();
ExternalContext externalContext = context.getExternalContext();
// HttpServletRequest request = (HttpServletRequest) externalContext.getRequest();
logged = false;
// request.login(username, password);
if ( users.get(username)!= null && users.get(username).equals(password) ) {
logged = true;
externalContext.redirect("/admin/");
} else {
context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,"Failed","Error"));
}
}
现在这显然行不通,因为我不知道如何告诉 Java EE:“嘿!我告诉你这个用户是有效的!只要……让他登录!”
我想 API 只支持 request.login() 但我不想使用 MemoryRealm、JDBCRealm 等等......我确定用户有效性的其他方式!
如果无法以编程方式登录用户,最好的解决方法是什么?也许使用单个用户名+密码对创建一个领域并始终将它们用于 request.login()?