繁体   English   中英

Jetty JDBCLoginService无法获取密码更改吗?

[英]Jetty JDBCLoginService doesn't pick up password changes?

我已经成功地将Jetty JDBCLoginService用于FORM身份验证(正如在Jetty配置安全性身份验证页面中所述 )。

用户首次登录JDBCLoginService缓存用户密码详细信息(如果您遵循JDBCLoginService.loadUser(String)的逻辑, JDBCLoginService.loadUser(String)可以很快地获得要缓存在MappedLoginService._users映射中的用户身份)。

但是,没有任何东西会使该缓存无效-即使用户注销了旧的细节,也永远保留在那里。

在我的Web应用程序中,我提供了自己的用户设置servlet,该servlet允许用户更改密码。 这完全独立于JDBCLoginService与数据库进行交互,因此很显然, JDBCLoginService不会接受它所做的JDBCLoginService

我看不到任何明显的方式让Webapp向登录服务发出此类更改信号。 我将尝试子类化JDBCLoginService并重写MappedLoginService.logout(UserIdentity)以始终在注销时从缓存中删除该用户,以便在下次登录时获取任何密码更改。

但是更改密码是很正常的事情,所以令我惊讶的是我需要更改标准行为-我应该以不同的方式处理事情吗? 还是使用例如基于JDBCLoginService构建的更高级的库?

这是什么版本的Jetty? 用于JDBCLoginService9.2.6 Javadocs表示:

使用JDBC作为数据源的HashMapped User Realm。 JDBCLoginService扩展了HashULoginService并添加了一种从数据库中获取用户信息的方法。 login()方法为用户检查继承的Map。 如果找不到该用户,它将从数据库中获取详细信息并填充继承的Map。 然后,它调用超类login()方法执行实际的身份验证。 定期(由配置参数控制)清除内部哈希。 可以通过将缓存刷新间隔设置为零来禁用缓存。 使用一个在启动时初始化的数据库连接。 失败时重新连接。 authenticate()是“同步的”。 用于配置的示例属性文件位于$ JETTY_HOME / etc / jdbcRealm.properties中

这意味着您可以控制使缓存无效的频率,或者完全禁用缓存。

但是请参阅上面的评论,您可能更喜欢在Shiro或Spring Security中使用更可靠的身份验证/授权设置(不一定需要Spring)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM