JSF和容器管理安全性

时间:2012-06-08 00:09:21

标签: jsf authentication java-ee

我有一个JSF登录页面,当用户直接导航到它时非常有效。

但是,如果用户在未先登录的情况下尝试访问受保护页面,则容器会正确拦截并将其抛出到登录页面。但是,因为登录页面是JSF,所以存在问题。发送给用户的是原始JSF页面,完全未被FacesServlet处理。

Snippet示例 - 在未登录的情况下访问受保护页面后发送到浏览器:

<ui:define name="body">
    <p:growl id="growl" showDetail="true" sticky="true"  /> 
    <div class="mytext">Please login to the application...</div>

    <form method="POST" action="j_security_check">
        <table cellpadding="0" cellspacing="0" border="0">
            <tr>
                <td align="right">Username:&nbsp;</td>
                <td>
                    <input type="text" name="j_username"/>
                </td>
            </tr>
            <tr>
                <td align="right">Password:&nbsp;</td>
                <td>
                    <input type="password" name="j_password"/>
                </td>
            </tr>
            <tr>
                <td></td>
                <td>
                    <input type="submit" value="Login"/>
                 </td>
             </tr>
            </table>
     </form>
 </ui:define>

有没有办法强制容器通过FacesServlet处理器呈现响应,而不是简单地返回原始JSF文件?

1 个答案:

答案 0 :(得分:4)

更改<form-login-page>的网址以匹配FacesServlet的网址格式,或者更好的是,将FacesServlet的网址格式更改为*.xhtml,以便通过有目的地更改浏览器地址栏中的URL,endusers永远不会看到任何页面的原始JSF源代码。