java - servlet 过滤器中的 URL 映射问题

标签 java servlets servlet-filters

我已经有两个过滤器,它们通常检查有效 session 。如果 session 有效,它将重定向到 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正在加载 即使我有一个有效的 session 。

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

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

有什么建议吗?

最佳答案

为什么使用两个过滤器?

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

那么以下情况是可能的:

  • 用户调用http://localhost:8080/Hibernate
  • 服务器重定向到默认页面http://localhost:8080/Hibernate/ExpenseDetailsManagement.html
  • 当浏览器请求此页面时,将调用剩余的 servlet 过滤器。
  • 如果没有有效的 session 处于 Activity 状态,则在过滤器内重定向到 http://localhost:8080/Hibernate/ExpenseManagementLogin.html
  • 用户填写登录表单并提交表单。在 servlet 或 JSP 页面(提交目标处理程序)中,您检查登录名和密码,如果有效,则将重定向发送到 http://localhost:8080/Hibernate/ExpenseDetailsManagement.html
  • 现在,当浏览器第二次请求这一端时,servlet 过滤器会看到有效的 session ,并且不执行任何操作,从而可以传递 protected 页面。

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

关于java - servlet 过滤器中的 URL 映射问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3823054/

相关文章:

java - 测试秒表对象的主要方法错误

java - 数组中第二小的数字 - 输出不正确

java - 你如何发送带有中文字符的Javamail?

java - 数据未从 servlet 插入到 mysql 表

cookies - Jersey:我可以在 ContainerResponseFilter 中添加 cookie 吗?

java - 保护 Jersey 2 Rest API

java - linux中如何设置CLASSPATH让java找到jar文件?

java - Maven是否应该为不同的应用服务器打包不同的WAR?

java - Spring mvc。不区分大小写的获取参数映射

java - 有没有办法让 Spring boot 过滤器异步运行?