当前位置: 首页 > 知识库问答 >
问题:

对于使用自定义用户注册表登录失败的根本原因,在WebSphere(Liberty)中调用哪个API?

赵景曜
2023-03-14

WebSphere(传统):在使用< code>custom user registry进行基于容器的身份验证的情况下,当从web应用程序登录失败时,我们通常通过调用以下命令来查找失败的根本原因:

< code > com . IBM . WebSphere . security . auth . ws subject . getrootloginexception();

上述 API 存在于:{Server_Root_Dir}/应用服务器/插件/com.ibm.ws.runtime_x.y.z.jar

方法getRootLoginException()的反编译源代码是:

public static Throwable getRootLoginException(){
   return ContextManagerFactory.getInstance().getRootException();
}

WebSphere(Liberty):在使用自定义用户注册表进行基于容器的身份验证的情况下,我们无法通过调用来找到登录失败的根本原因:

< code > com . IBM . WebSphere . security . auth . ws subject . getrootloginexception();

上述API存在于:{Server_Root_Dir}/lib/com.ibm.websphere.security_x.y.z.jar

这是因为方法< code > getRootLoginException()的反编译源代码是:

public static Throwable getRootLoginException(){
   return null;
}

但在 https://www.ibm.com/support/knowledgecenter/SSEQTP_8.5.5/com.ibm.websphere.javadoc.doc/web/apidocs/com/ibm/websphere/security/auth/WSSubject.html

IBM声称:

公共静态java.lang.Throwable getRootLoginException()

这个方便的方法返回系统登录模块中捕获的root登录异常(如果存在)。

它将从当前线程中提取异常。您将得到登录模块所看到的根异常。这可能是一个嵌套的异常。您可能需要从返回的异常中提取异常,直到获得真正的根异常。

返回:包含根登录异常的可引发项。如果未发生登录异常,则将返回 null。

我想知道在WebSphere (Liberty)中调用哪个API才能找到登录失败的根本原因。

为什么选择WSSubject。需要getRootLoginException():

<code>com.ibm.websphere.security的自定义实现。UserRegistry要求您通过提供自己的checkPassword(String userSecurityName,String passwd)定义来验证web应用程序用户输入的用户名和密码。请看http://www.ibm.com/support/knowledgecenter/en/SSAW57_8.5.5/com.ibm.websphere.nd.doc/ae/csec_customauth.html

如果用户提供的信息不正确,您可能会将“密码检查失败异常”自定义注册表异常”与邮件一起抛出。这个检查密码(字符串用户安全名称,字符串传递wd)实际上是由WebSphere(传统或自由)从JAAS中调用的 javax.security.auth.spi.LoginModule.login()密码检查失败例外自定义注册表例外,它们的消息被包装,javax.security.auth.login.login.登录异常被抛出。

为了向Web应用程序用户提供反馈,我们需要获取从javax.security.auth.spi.LoginModule.login()抛出的异常。这样做的方法是从servlet过滤器调用com.ibm.websphere.security.auth.WSSubject.getRootLoginException()。这在WebSphere(传统)中可以正常工作,但在WebSphere(Liberty)中就不行了。问题是IBM没有在任何地方记录这个限制。

共有1个答案

慎星纬
2023-03-14

在传统的WAS中,这在很久以前就被解析为APAR PM21010。您可能希望提交 PMR,特别是因为 Brian 发现这在 WebSphere 自由配置文件中作为受支持的 API 进行记录。

 类似资料:
  • 我试图创建Laravel 5.7的第一个项目。 在这个项目中,我有三个不同的领域和三个不同的登录(例如,用户登录,管理员登录,技术人员登录) 现在,我想自定义第一次登录(url,html,输入,类,数据库表,数据库列ecc...),但我不知道该怎么做。 第一次登录的URL是 我的桌子是: 我已经搜索了很多,用我找到的信息,我试图这样做: config/auth。php: 网状物php 登录控制器。

  • 我有问题连接到一个QMGR。由于端口1414上ssl通道的cipherspec错误,主机拒绝了连接。密钥库签出正常。我能够使用openssh连接到主机并检索其密钥。 我已尝试启用和禁用SSLv3。我提供了带和不带“”(双引号)的密钥库密码。这些是连接属性

  • 我是WebSphere Liberty概要文件的新手。我正在编写17.0.0.4版本。我试图实现的是为应用程序设置自定义JAAS登录设置。该应用程序在WebSphere8.5上运行良好。 我已经查看了IBM知识中心的许多链接,但得到了JAAS自定义登录的结果,但不是两者一起。在WebSphere 8.5中,我们有层次结构来决定哪个身份验证机制去哪里,但是在Liberty中,如果我设置自定义JAAS

  • 问题内容: 我想为一个wordpress网站创建移动应用。我已经集成了wordpress json插件 。我不确定在哪里可以找到用于用户注册和登录的服务。请指教。 问题答案: 要注册用户,这将通过仅调用url并使用GET Method 向其中添加数据的方式,向您确切显示如何在数据库中注册一个用户。现在,通过移动应用程序执行此操作,您只需向包含用户所需的所有数据的URL发出http请求即可。这将向您

  • 问题内容: 我无法摆脱这个错误。我已经通过SSMS添加了“ NT AUTHORITY \ NETWORK”用户以及使用此线程作为参考的相关角色:用户“ NT AUTHORITY \ NETWORKSERVICE”的登录失败 我试图通过Windows服务建立数据库连接。在调试模式下,数据库连接可以正常工作。当我实际尝试运行已安装的服务时,便会出现此错误。 这是我来自app.config的连接字符串:

  • 问题内容: 这是我目前用于注册的内容: 是否可以不要求用户在创建帐户后手动登录,而是简单地自动登录?谢谢。 编辑:我曾尝试过login()函数,但没有成功。我相信问题是未设置AUTHENTICATION_BACKENDS。 问题答案: 使用authenticate()和login()功能: