我有一个已部署在Glassfish 3.0.1上的Web应用程序,该应用程序使用容器托管安全性。这是使用J_Security_Check对JDBCrealm的简单,标准形式的实现。与确保应用程序有关的一切都很好(我不敢相信我过去曾滚动过自己的安全系统)。

我似乎无法弄清楚的是如何处理用户输入错误密码的情况。我的“ loginfailed.xhtml”页面已正确显示,但我想将用户引导回登录页面(通过链接或自动)重试。

当我尝试此操作时,链接回到登录。XHTML页面工作正常,但是安全系统似乎已忘记了用户经过身份验证后试图发送的位置。当用户正确身份验证异常时,由于系统试图加载不存在的页面(某些登录页面URL的某些版本)。

我想我可以将用户引导回主页,让他们从那里再试一次,但是很长一段时间以来,我从未看到过如此多的kludge的应用程序。所有想法并帮助感恩地收到...

有帮助吗?

解决方案

我假设您只是在平原HTML页面上使用J_Security_Check,对吗?您现在可以使用HttpservletRequest#登录方法进行程序化登录。

这是一个例子。

public String login() {

    FacesContext context = FacesContext.getCurrentInstance();
    HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest();

    try {
        request.login(this.userName, this.password);
        return "index?faces-redirect=true";
    } catch (Exception e) {
        return "error?faces-redirect=true";
    }

因此,您可以在登录后将其发送到任何需要的地方。这只是具有用户名和密码成员变量的标准JSF支持BEAN。

H:CommandButton使用此登录方法作为JSF操作。

其他提示

确实,另一个解决方案是如果您不想管理Java中的登录名,则将使用JavaScript。

login.html(简单的HTML表格)

<form name="loginForm" method="POST" action="j_security_check">
    <input id="username" type="text" />
    <input id="password" type="password" />
    <input type="submit"value="Login" />
</form>

然后出于错误。

function redirect() {
window.location("http://yournewurl")
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top