gpt4 book ai didi

servlets - 为 Servlet Filter 提供多个 URL 模式

转载 作者:行者123 更新时间:2023-12-02 18:29:29 24 4
gpt4 key购买 nike

我在 JSF 应用程序中使用 Servlet 过滤器。我的应用程序中有三组网页,我想在 Servlet 过滤器中检查这些页面的身份验证:

我的文件夹

/Admin/ *.xhtml

/Supervisor/*.xhtml
/Employee/*.xhtml

我正在编写web.xml,就像

<filter>
<filter-name>LoginFilter</filter-name>
<filter-class>com.ems.admin.servlet.LoginFilter</filter-class>
</filter>

<filter-mapping>
<filter-name>LoginFilter</filter-name>
<url-pattern>/Employee/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>LoginFilter</filter-name>
<url-pattern>/Admin/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>LoginFilter</filter-name>
<url-pattern>/Supervisor/*</url-pattern>
</filter-mapping>

但要求像

http://localhost:8080/EMS2/faces/Html/Admin/Upload.xhtml

没有进入过滤器。

我必须为这 3 个文件夹提供安全保护。

如何解决这个问题?

最佳答案

如果 URL 模式以 / 开头,那么它是相对于上下文根的。 /Admin/* URL 模式仅匹配 http://localhost:8080/EMS2/Admin/* 上的页面(假设 /EMS2 是上下文路径),但它们实际上位于 http://localhost:8080/EMS2/faces/Html/Admin/* 上,因此您的 URL 模式永远不会匹配。

您需要在 URL 模式前添加 /faces/Html 前缀也像这样:

<url-pattern>/faces/Html/Admin/*</url-pattern>

您也可以重新配置您的 Web 项目结构/配置,以便摆脱 /faces/Html URL 中的路径,以便您只需打开页面即可,例如 http://localhost:8080/EMS2/Admin/Upload.xhtml .

您的过滤器映射语法一切正常。然而,指定多个 URL 模式的一种更简单的方法是仅使用一个 <filter-mapping>多个 <url-pattern>条目:

<filter-mapping>
<filter-name>LoginFilter</filter-name>
<url-pattern>/faces/Html/Employee/*</url-pattern>
<url-pattern>/faces/Html/Admin/*</url-pattern>
<url-pattern>/faces/Html/Supervisor/*</url-pattern>
</filter-mapping>

关于servlets - 为 Servlet Filter 提供多个 URL 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11645516/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com