如何加上「;禁用用户";JavaEE应用程序中的管理功能?

如何加上「;禁用用户";JavaEE应用程序中的管理功能?,java,authentication,jakarta-ee,jaas,jdbcrealm,Java,Authentication,Jakarta Ee,Jaas,Jdbcrealm,我有一个JavaEE应用程序,它使用JDBCReal作为JAAS上下文在GlassFish 3.1上进行身份验证。下面是JSF2.0 managedbean中的身份验证代码- FacesContext context=FacesContext.getCurrentInstance(); HttpServletRequest=(HttpServletRequest)上下文。getExternalContext().getRequest(); 试一试{ if(request.getUserPrinc

我有一个JavaEE应用程序,它使用
JDBCReal
作为
JAAS上下文
在GlassFish 3.1上进行身份验证。下面是JSF2.0 managedbean中的身份验证代码-

FacesContext context=FacesContext.getCurrentInstance();
HttpServletRequest=(HttpServletRequest)上下文。getExternalContext().getRequest();
试一试{
if(request.getUserPrincipal()!=null){
请求。注销();
}
if(request.getUserPrincipal()==null){
request.login(this.username,this.password);
}
我正在尝试添加一些管理功能(如创建/删除/更新/禁用用户)。除“禁用”功能外,所有功能我几乎都完成了,这让我对如何继续操作感到困惑

我现在能想到的唯一方法是在“users”表中添加一个字段,类似于“status”,它将有一个值(“enabled”或“disabled”)。并在进行身份验证之前检查“status”

考虑到我正在使用JAAS(JDBCRealm),我应该这样做吗?或者,还有其他(标准)方法吗


我想看看这里是否有人在这方面有经验,可以为我指出正确的方向。

我想你应该通过JDBC/JPA管理你的用户表

在unix/linux中,
passwd-l
将哈希值更改为无效值。发件人:

实际上,从
/etc/shadow
解锁的帐户:

test:$6$c7Lz2A2l$8AoSBy8C2U7uUns4aDRP2J/QRzUOYF...o69XPR/:15259:0:99999:7:::
passwd-l测试之后使用相同的帐户

test:!$6$c7Lz2A2l$8AoSBy8C2U7uUns4aDRP2J/QRzUOYF...o69XPR/:15259:0:99999:7:::
前缀值无效,因为哈希函数总是返回相同的位数。如果存储的值超过该长度,它们将永远不会匹配。您可以对哈希密码执行相同的操作-只需通过JDBC/JPA在密码前面加上
(或任何其他字符串)

当然,这不适用于明文密码


另一个解决方案是从数据库中删除用户的角色。在这种情况下,用户可以登录,但如果您在
web.xml
中设置了
安全约束,则用户将无法执行任何操作(注销除外)。

非常感谢您的输入。+1因为您的想法,我不必再添加一列“状态”但基本上我想看到的是,是否有必要手动检查用户是否存在,如果是,则禁用或启用该用户,然后仅在用户存在且已启用的情况下进行登录。无需手动检查,
login()
method/JDBCRealm为您做这件事。但是如果您想打印更详细的错误消息(“登录失败,禁用用户”,而不仅仅是“登录失败”),您必须使用JDBC/JPA手动检查。(也检查答案更新。)只需要有人确认。谢谢。我会接受您的答案。
test:!$6$c7Lz2A2l$8AoSBy8C2U7uUns4aDRP2J/QRzUOYF...o69XPR/:15259:0:99999:7:::