在我的项目中,我想在我的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
等。我想在发生时显示错误页面。
答案 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访问