【发布时间】:2014-08-06 06:51:15
【问题描述】:
我正在运行一个基于 Java EE 7(JSF、JPA)和 CDI 的应用程序,使用 Shiro 进行身份验证和授权。
我有要求,用户必须在一定时间后更改密码(可由应用程序的管理员自定义,即 30 天)。在我们的用户表中,我们存储了上次设置密码时的信息,因此可以在登录时计算是否需要这样做。
计划是重新显示登录页面并表示不同的表单(更改密码而不是登录)。到目前为止,一切都很好。然而: 如何强制更改密码而不让用户导航到其他页面?
有推荐的(甚至是内置的)解决方案吗?
我的想法是实现一个过滤器,检查会话范围的登录对象是否需要重置 PW。 希望这就像创建一个新过滤器一样简单,在那里注入登录名并检查标志的状态 - 只要标志为真/他不更新他的密码,就将用户重定向到登录页面。
(我们已经有一个自定义的 cdi 感知 EnvironmentLoaderListener 来支持我们的 JPA 领域。)
新过滤器会在最后一行后面吗?
[urls]
/javax.faces.resource/** = anon
/layout.xhtml = anon
/css/** = anon
/login.xhtml = user
/logout.xhtml = logout
/** = user
所以我们有:
/** = user,pwresetfilter
欢迎对细节以及整体解决方案提出建议。
【问题讨论】: