【问题标题】:Tomcat 8 JDBC Realm: change user's passwordTomcat 8 JDBC Realm:更改用户密码
【发布时间】:2015-10-07 19:09:12
【问题描述】:

我在我的 Tomcat 实例中实现了 JDBC 领域表单身份验证。用户名及其角色存储在数据库表中,管理员应为用户分配永久密码。 是否可以在第一次尝试登录时要求用户更改密码,以便密码不是管理员规定的,而是可以由用户自己生成?

【问题讨论】:

    标签: tomcat jdbcrealm


    【解决方案1】:

    我想你必须自己实现这个。例如,您可以在用户表中添加一个额外的列isPassWordSet,默认值为false。然后,用户第一次登录后,使用管理员提供的密码,重定向到他或她必须提供自己密码的页面,只允许isPasswordSet=true 的用户连接到应用程序的其余部分。一旦用户完成此步骤,如果提供的密码被认为是有效的,则将isPasswordSet 设置为true 并且可以继续。

    【讨论】:

    • 我可以从哪里重定向用户?我可以做到的一种方法是使用HttpServletResponse.sendRedirect( url ),但我没有找到如何在自定义领域实现中获取 HttpServletResponse.. 请帮助..
    • 你的意思是你想扩展RealmBase?恐怕这不会有帮助。您可以从领域内调用 url 将用户发送到第二个表单,但是您仍然必须验证用户,否则他或她将被发送到初始登录表单。表单身份验证是一个 Servlet 规范,用于保证跨容器的可移植性,因此无法添加额外的表单字段。
    • ... 不过,一旦用户登录但尚未更改初始管理员密码,您可以让您的应用程序强制用户更改他的密码,例如通过一些拦截器类,它总是检查是否设置了密码。如果没有,请重定向到密码表单。
    • 这个怎么样:每当我需要对用户进行身份验证时,我都会获取用户凭据并从 servlet 中执行 HttpServletRequest.login(name, pass) 方法。另外,除了必要的用户角色之外,我还为他添加了一个“新人”角色,这样我就可以看到他的isUserinRole("newcomer")true 还是false,如果true 我会做HttpServletRequest.sendRedirect( ChangePassUrl ) 他到更改密码,然后删除他的“新人”角色。这样可以减少对数据库的访问。
    • 是的,这是一个不错的概念,只要您不修复密码,您就会被标记为newcomer。我假设您在过滤器中进行重定向以拒绝 newcomer 访问您的应用程序的其余部分?
    猜你喜欢
    • 2016-06-25
    • 1970-01-01
    • 2020-05-23
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 2016-10-02
    • 2012-05-03
    • 2017-05-06
    相关资源
    最近更新 更多