【问题标题】:Problem with URL mapping in servlet filterservlet 过滤器中的 URL 映射问题
【发布时间】:2010-09-29 15:22:53
【问题描述】:

我已经有两个过滤器,通常用于检查有效会话。如果会话有效,它将重定向到ExpenseDetailsManagement.html 否则ExpenseManagementLogin.html。 web.xml 配置看起来像

<filter>
    <filter-name>ExpenseAuthentication</filter-name>
    <filter-class>com.pricar.hibernate.ExpenseAuthentication</filter-class>
</filter>
<filter>
    <filter-name>ExpenseAuthenticationFilter</filter-name>
    <filter-class>com.pricar.hibernate.ExpenseAuthenticationFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>ExpenseAuthentication</filter-name>
    <url-pattern>*/ExpenseDetailsManagement.html</url-pattern>
</filter-mapping>
<filter-mapping>
    <filter-name>ExpenseAuthenticationFilter</filter-name>
    <url-pattern>*/ExpenseManagementLogin.html</url-pattern>
</filter-mapping>

以上两个工作正常。

应用程序路径看起来像 http://localhost:8080/Hibernate/ExpenseManagementLogin.html

如果我尝试使用http://localhost:8080/Hibernate,那么ExpenseManagementLogin.html正在加载 即使我有一个有效的会话。

为此,我尝试了一些 url-mapping-patterns,例如 Hibernate//Hibernate//* 然后 它以无限循环或找不到资源错误结束。

我的网络应用只有两个 HTML 页面,一个用于登录,另一个用于应用程序。

有什么建议吗?

【问题讨论】:

    标签: java servlets servlet-filters


    【解决方案1】:

    为什么要使用两个过滤器?

    删除ExpenseAuthentificationFilter。在最简单的情况下,将 ExpenseManagementLogin.html 文件放在战争的根目录中。 添加 Servlet 或 JSP 作为登录表单目标。 将页面 ExpenseDetailsManagement.html 配置为默认页面。

    那么下面的场景是可能的:

    • 用户拨打http://localhost:8080/Hibernate
    • 服务器重定向到默认页面http://localhost:8080/Hibernate/ExpenseDetailsManagement.html
    • 当浏览器请求这个页面时,剩下的 servlet 过滤器会被调用。
    • 如果没有有效的会话处于活动状态,则在过滤器内重定向到 http://localhost:8080/Hibernate/ExpenseManagementLogin.html
    • 用户填写登录表单并提交表单。在 servlet 或 JSP 页面(提交目标处理程序)中检查登录名和密码,如果有效,则将重定向发送到 http://localhost:8080/Hibernate/ExpenseDetailsManagement.html
    • 现在,当浏览器第二次请求此端时,servlet 过滤器会看到有效会话并且什么也不做,因此可以传递受保护的页面。

    您还可以使用JAAS 来处理登录和身份验证。

    【讨论】:

    • 您在答案中的逻辑非常酷。但是,我将欢迎页面更改为ExpenseDetailsManagement.html。它没有通过 servlet 过滤器。它只是加载。我正在使用 Eclipse。
    • 好吧,我想,servlet 容器会做一个重定向。但它只转发到目标页面。
    • 然后创建一个 JSP 页面 index.jsp,将欢迎页面设置为 index.jsp 并像 &lt;% response.sendRedirect("ExpenseDetailManagement.html"); %&gt; 一样手动进行重定向 然后总是通过正确的 URL 请求 ExpenseDetailManagement.html,而不是作为转发.
    猜你喜欢
    • 2011-04-10
    • 2011-06-29
    • 2020-04-11
    • 1970-01-01
    • 2012-04-24
    • 2013-10-05
    • 2019-03-06
    • 2011-09-21
    • 2012-01-24
    相关资源
    最近更新 更多