基于j_security_check表单的身份验证错误重定向

时间:2018-04-20 12:26:51

标签: jsp jsf web

用户输入错误的用户名/密码后,我会通过重定向到错误页面来处理此问题。在我的情况下,错误页面与登录相同,但我传递参数wrongCredentials,所以我可以在我的jsf页面中呈现显示错误的用户名/密码消息的特殊块。 如果用户现在输入正确的凭据而不是重定向到源页面,则会使用GET将其重定向到* / j_security_check,并且找不到404。

我觉得有趣的是,当输入错误的凭据时,浏览器中的网址不会更改为* / login.xhtml?wrongCredentials = true而是更改为* / j_security_check但是呈现的网页是登录的,其中包含有关错误的正确错误消息凭证。

这是我的web.xml

<login-config>
    <auth-method>FORM</auth-method>
    <form-login-config>
        <form-login-page>/login.xhtml</form-login-page>
        <form-error-page>/login.xhtml?wrongCredentials=true</form-error-page>
    </form-login-config>
</login-config>

此处还有登录页面表单:

<form id="login_form" name="login_form" action="j_security_check" method="post">
                                <table>
                                    <tbody>
                                    <tr>
                                        <td><input type="text" id="username" name="j_username" placeholder="Username"/></td>
                                    </tr>
                                    <tr>
                                        <td><input type="password" id="password" name="j_password" placeholder="Password"/></td>
                                    </tr>
                                    <tr>
                                        <td><input type="submit" value="login" class="btnBlue"/></td>
                                    </tr>
                                    </tbody>
                                </table>
                                <p:panel rendered="${param['wrongCredentials'] != null}" styleClass="wrongPasswordPanel">
                                    <h:outputText value="Wrong username or password" styleClass="wrongPasswordTxt"/>
                                </p:panel>
                                <p:panel styleClass="forgotPasswordPanel">
                                    <h:outputText value="Forgot password? Please, contact " styleClass="wrongPasswordTxt"/><a href="mailto:support@support.com" class="wrongPasswordTxt">support@support.com</a>
                                </p:panel>

我尝试在GET请求上实现自定义过滤器来拦截* / j_security_check,但是在j_security_check之后加载了过滤器。

我正在运行WildFly10。

1 个答案:

答案 0 :(得分:0)

在我的情况下,我得到了错误的重定向错误,因为我正在https://localhost:8181/中测试我的应用...并且服务器尝试重定向到https://0.0.0.0.0.0.0.1:8181/ ...这应该是IPv6等价物到127.0.0.1(查看'位置'http响应头)。

浏览器无法理解该IP并引发错误。

我所做的解决方法是使用我的实际主机名而不是'localhost'进行测试,例如https://myhostname:8181/ ...在这种情况下,服务器将主机名保留在位置标头中,而不是将其转换为IPv6。