【发布时间】:2018-08-17 08:57:55
【问题描述】:
我在开发过程中遇到了一些挑战,基本上我需要使用令牌授权用户去/调用某些页面/功能,这些页面可以设置为按需授权(也许在数据库)。
应用程序是用 Struts 1 制作的,所以我一直在想的只是使用过滤器拦截 URL,检查请求是否需要授权,通过电子邮件发送令牌并将用户重定向到“插入令牌”页面,如果引用者是令牌页面,则再次通过过滤器拦截并验证值,如果正确,则重定向到原始请求...
但是我不能简单地恢复之前的请求,而且过滤器拦截了 ServletRequest 和 Struts 有更详细的构造,所以我不能丢失动作或表单对象。
我不确定这是否是解决此需求的好方法,如果是,我需要将原始请求保留在内存中,我不知道该怎么做。
这是一个遗留项目,有很多页面和控制器,所以几乎不可能只通过每个方法进行验证。
我会接受任何建议,祝你有美好的一天! :)
编辑
为了添加更多上下文,该项目有许多使用 Struts 制作的表单,因此 Struts 在内部将 html 表单映射到 POJO,以将它们作为参数获取到操作(控制器)方法中:ActionMapping 和 ActionForm。创建过滤器时,我的参数是 ServletRequest、ServletResponse 和 FilterChain 对象,直接我没有 ActionMapping 或 ActionForm,但我知道它们是请求结构的一部分,所以我不知道如何获取它们直接,我正在尝试处理整个请求,因此存在安全性和大小问题,并且还因为我在执行重定向操作时不知道如何存储原始请求的副本
【问题讨论】:
-
只是为了澄清:“将第一个 HTTP 请求作为一个整体存储,并在第二个请求之前在过滤器中检索/使用它”。这是正确的吗?
-
第二个请求发生在用户最终发送重定向时询问的令牌时,一旦我执行验证,我需要让用户继续原始请求
-
如果您对问题的答案感到满意,请将其关闭,以便社区的其他成员受益。
-
@HosseinPursultani 一旦我得到它,我会的,这个问题是我现在的首要任务,所以我仍在努力
标签: java servlets servlet-filters struts-1