在JSF Web应用程序中阻止直接URL访问

时间:2013-09-13 08:28:33

标签: jsp jsf security-constraint

在我的项目中,我想在我的JSF Web应用程序中限制直接URL访问。虽然我在网上发现它提供了在web.xml中配置安全性约束的建议。

   <security-constraint>
    <display-name>Restrict raw XHTML Documents</display-name>
    <web-resource-collection>
        <web-resource-name>XHTML</web-resource-name>
        <url-pattern>/manage/*</url-pattern>
        <http-method>GET</http-method>
        <http-method>POST</http-method>
    </web-resource-collection>
    <auth-constraint />
    <user-data-constraint>
        <transport-guarantee>NONE</transport-guarantee>
    </user-data-constraint>
</security-constraint>

这样,我可以限制对/manage/*.jsp的直接网址访问。但是我有很多要限制的文件夹,例如/view/*.jsp/others/*.jsp等。我想在发生时显示错误页面。

2 个答案:

答案 0 :(得分:1)

您现在可能已经想出了解决方案,但想回答一下。

要实现此限制,是将所有url模式作为web-resource-collection的一部分。而且,您可以定义另一种没有auth-constraint的安全约束,以允许如下所示的直接访问。

    <security-constraint>
        <display-name>Restrict raw XHTML Documents</display-name>
        <web-resource-collection>
            <web-resource-name>XHTML</web-resource-name>
            <url-pattern>/manage/*</url-pattern>
            <url-pattern>/view/*</url-pattern>
            <http-method>GET</http-method>
            <http-method>POST</http-method>
        </web-resource-collection>
        <auth-constraint />
        <user-data-constraint>
            <transport-guarantee>NONE</transport-guarantee>
        </user-data-constraint>
    </security-constraint>

<security-constraint>
    <display-name>Allow login pages</display-name>
    <web-resource-collection>
        <web-resource-name>Seam</web-resource-name>
        <url-pattern>*.seam</url-pattern>
        ...<!-- You can define all the url-patterns you want to allow direct access to -->

    </web-resource-collection>

</security-constraint>

您正在使用空的auth-constraint,这意味着无论身份验证如何,它都会阻止对列出的所有URL模式的直接访问。您将收到403错误,并且可以使用错误页面标签为其定义页面

<error-page>
    <error-code>403</error-code>
    <location>/path/to/error.jsp</location>
    </error-page>

否则,您可以使用错误页面标记来定义错误jsps。

<error-page>
<exception-type>anyexception class name</exception-type>
<location>/path/to/error.jsp</location>
</error-page>

答案 1 :(得分:0)

一种方法是将jsp文件移动到web-inf目录中,这将阻止直接URL访问