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

WebLogic:通过WLST添加一个新的自定义身份验证提供程序抛出一个ClassNotFoundException

舒嘉德
2023-03-14

我正在尝试使用WLST在线模式脚本添加一个新的自定义身份验证提供程序,但我得到一个类未找到异常,尽管我可以在WL控制台上看到我的提供程序。

情况如下:

  1. 我有一个JAR文件,它包含一个自定义WebLogic身份验证提供程序
  2. JAR复制在user\u projects/domains/$DOMAIN\u NAME/lib/目录下
  3. 我可以在WL控制台上看到自定义身份验证提供程序,出现在列表中:Home

但是我需要自动化这个步骤,所以我已经为此创建了一个WLST脚本。WLST的相关部分如下:

# add a new authentication provider with name of MyCustomAuthProvider
cd('/SecurityConfiguration/' + _domainName + '/Realms/myrealm')
cmo.createAuthenticationProvider('MyCustomAuthProvider', 'aa.bb.cc.MyCustomAuthProvider')

cd('/SecurityConfiguration/' + _domainName + '/Realms/myrealm/AuthenticationProviders/MyCustomAuthProvider')
cmo.setControlFlag('OPTIONAL')
    
# reorder authentication providers
...

但此WLST引发以下异常:

java.lang.RuntimeException: java.lang.RuntimeException: java.lang.ClassNotFoundException: aa.bb.cc.MyCustomAuthProvider

所以我仔细检查了一下WL是否看到了我的自定义身份验证提供程序:

wls:/offline> connect('weblogic', 'weblogic12', 't3://localhost:7001')
cd('/SecurityConfiguration/myDomain/Realms/myrealm')
ls()

我得到的名单和我预期的完全一样:我的班级在名单上。这就是我可以使用web控制台添加它的原因。

这是身份验证提供者类型的值:

java.lang.String[com.bea.security.saml2.providers.SAML2IdentityAsserter,
aa.bb.cc.MyCustomAuthProvider,
eblogic.security.providers.authentication.ActiveDirectoryAuthenticator,
weblogic.security.providers.authentication.CustomDBMSAuthenticator,
eblogic.security.providers.authentication.DefaultAuthenticator,
weblogic.security.providers.authentication.DefaultIdentityAsserter, 
eblogic.security.providers.authentication.IPlanetAuthenticator,
weblogic.security.providers.authentication.LDAPAuthenticator,
weblogic.security.providers.authentication.LDAPX509IdentityAsserter,
weblogic.security.providers.authentication.NegotiateIdentityAsserter,
weblogic.security.providers.authentication.NovellAuthenticator,
weblogic.security.providers.authentication.OpenLDAPAuthenticator,
weblogic.security.providers.authentication.OracleIdentityCloudIntegrator,
weblogic.security.providers.authentication.OracleInternetDirectoryAuthenticator,
weblogic.security.providers.authentication.OracleUnifiedDirectoryAuthenticator,
weblogic.security.providers.authentication.OracleVirtualDirectoryAuthenticator,
weblogic.security.providers.authentication.ReadOnlySQLAuthenticator,
weblogic.security.providers.authentication.SQLAuthenticator,
weblogic.security.providers.authentication.VirtualUserAuthenticator,
weblogic.security.providers.saml.SAMLAuthenticator,
weblogic.security.providers.saml.SAMLIdentityAsserterV2]

一切看起来都很完美。但是为什么WLST在尝试创建一个类时抛出一个未找到异常?这太疯狂了。

我对此进行了谷歌搜索,但只有我发现的相同问题没有解决方案。

  • 在这里
  • 在这里

我错过了什么?


共有2个答案

东郭海阳
2023-03-14
匿名用户

我将我的JAR添加到WLST类路径,但这没有帮助。

  • 我更改了CLASSPATH变量,因为wlst.sh在后台执行java命令,所以必须考虑这个标准变量。它不起作用。
  • 我将-cpJVM参数手动添加到启动WlST的java命令中。它不起作用。

唯一对我有效的解决方法是:

  • 对于WL控制台:将包含自定义身份验证提供程序的JAR复制到$ORACLE\u HOME/user\u projects/domains/$DOMAIN\u NAME/lib/目录下

第二个副本解决了WLST引发的类未找到问题。

如果你知道更好、更标准的方法,请告诉我。

祁兴运
2023-03-14

在某个时候,Oracle已经从使用CLASSPATH改为使用WLST_EXT_CLASSPATH来设置WLST的类路径。尽管Oracle似乎没有很好地记录这是正确使用的环境变量。我通过挖掘各种wlst.sh调用的sh脚本找到了它,但是12c的这个文档引用了它,但似乎是唯一提到它的地方。

我已经使用14.1.1和DOMAIN/lib/mbeantypes目录中的自定义提供程序对此进行了测试,并且它可以工作(即,只要我先设置WLST_EXT_CLASSPATH,我就可以使用WLST配置自定义安全提供程序),但没有12c来测试它是否可以工作。

 类似资料:
  • 我正在将应用程序的安全性迁移到Spring Security4.0。我的要求是身份验证应该是JAAS身份验证,自动化数据将从数据库中提取。所以我已经编写和自定义了身份验证提供程序。但我的问题是Spring没有将身份验证请求委托给我的自定义身份验证提供程序。 代码如下 web.xml条目 调用堆栈

  • 我在调试身份验证问题时遇到了这个代码片段: 我在调试和摆弄用户凭证时注意到,如果第一个身份验证提供者(即< code > userdailsservice )无法对我的用户进行身份验证,那么就会远程调用我的LDAP服务器来尝试对我的用户进行身份验证。但是,如果第一个身份验证提供者成功地对我的用户进行了身份验证,则不会调用第二个身份验证提供者。 我的问题是,列出这些身份验证提供者的工作方式是否使得如

  • 问题内容: 使用Passport.js是否可以为同一路由指定多个身份验证提供程序? 例如(在护照指南中),我可以在以下示例路线中使用本地策略以及Facebook和Twitter策略吗? 问题答案: Passport的中间件的构建方式使您可以在一个呼叫中使用多种策略。 但是,它是用OR顺序定义的。也就是说,只有在所有策略均未成功返回的情况下,它才会失败。 这是您将如何使用它: 换句话说,使用它的方法

  • 我的问题是,我希望有两个身份验证提供商 之前:我有我的UserDetailServiceImpl,我根据数据库中的数据验证了用户的身份(不确定是哪个提供者) 现在:我使用了ActiveDirectoryLdapAuthentiation提供程序,如下所示 我成功了,所以我可以认证。 问题是: 我现在无法再使用数据库用户登录,现在只有LDAP。 未使用UserDetailsService,因此用户具

  • 我希望我的web应用程序的用户通过LDAP和额外的自定义身份验证进行身份验证。这是一个用Kotlin编写的Spring Boot应用程序。我将AuthenticationManagerBuilder配置为 我希望链接身份验证,以便如果CustomAuthenticationProvider成功地进行身份验证(函数authenticate不抛出),身份验证将继续使用LDAP身份验证提供程序。 正如所

  • 问题内容: 在Spring Security中,有多个身份验证提供程序的参考,但是找不到Java config中的示例。 以下链接给出了XML表示法: Spring Security中的多个身份验证提供程序 我们需要使用LDAP或DB进行身份验证 下面是我们的示例代码: 问题答案: 也许这会帮助你: