首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Websphere中的容器管理身份验证别名访问JNDI数据资源(Spring +Ib导则/Mybatis)

使用Websphere中的容器管理身份验证别名访问JNDI数据资源(Spring +Ib导则/Mybatis)
EN

Stack Overflow用户
提问于 2021-01-06 08:49:35
回答 1查看 562关注 0票数 0

我使用的是WebSphere 8.5.5.18。

到目前为止,我正在使用组件管理身份验证别名作为我的DataSource。但是我想用容器管理代替。当我只是更改数据源安全设置中的安全设置时,我在日志中出现了错误。它无法获取记录。

异常Stacktrace:

代码语言:javascript
复制
Check the SQL Statement (preparation failed).  
--- Cause: java.sql.SQLException: [jcc][t4][10205][11234][3.72.54] Null userid is not supported. ERRORCODE=-4461, SQLSTATE=42815 DSRA0010E: SQL State = 42815, Error Code = -4,461
    at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:97)
    at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72)
    at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)
    at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)
    at org.springframework.orm.ibatis.SqlMapClientTemplate.execute(SqlMapClientTemplate.java:212)
    at org.springframework.orm.ibatis.SqlMapClientTemplate.queryForObject(SqlMapClientTemplate.java:271)

基本上,当设置从组件管理身份验证更改为容器管理身份验证别名时,数据库没有被正确访问。

当我使用组件管理身份验证运行时,它可以正常工作。是否将安全设置更改为容器管理身份验证别名,是否需要进行其他/附加设置/更改?或者,是否需要更改基础Spring代码以使其正常工作?

任何关于在websphere中配置/实现容器管理身份验证别名的帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2021-01-07 15:25:26

当您的代码(或代表它执行的任何第三方代码)使用资源引用查找数据源时,应用容器管理身份验证,该资源引用将资源身份验证指定为容器,或者将资源身份验证保留在未指定的位置,在这种情况下,它默认为容器。

组件管理身份验证适用于您的代码(或代表它执行的任何第三方代码)在没有资源引用的情况下查找数据源,或者使用指定资源身份验证为应用程序的资源引用。

下面是一些使用容器身份验证的资源引用示例:

代码语言:javascript
复制
// resource injection can be used on a web component (servlet) or ejb component
@Resource(name = "java:comp/env/jdbc/ds1ref", lookup = "jdbc/ds1", authenticationType = Resource.AuthenticationType.CONTAINER)
DataSource ds1;

@Resource(name = "java:comp/env/jdbc/ds2ref", lookup = "jdbc/ds2")
DataSource ds2;

...
// code that looks up one of the above resource references
DataSource ds = InitialContext.doLookup("java:comp/env/jdbc/ds1ref");

下面是在web.xml部署描述符中定义的资源引用的示例:

代码语言:javascript
复制
<resource-ref>
  <res-ref-name>java:comp/env/jdbc/ds3ref</res-ref-name>
  <res-type>javax.sql.DataSource</res-type>
  <res-auth>Container</res-auth>
  <lookup-name>jdbc/ds3</lookup-name>
</resource-ref>

如果第三方代码(如Spring )正在代表您查找数据源,并且希望它使用容器身份验证,则需要使用容器托管身份验证定义资源引用(如上面的示例所示),并将其资源引用名称提供给第三方软件,而不是当前正在这样做的软件。如果您不确定这是在哪里完成的,则可能有助于在应用程序中搜索配置好的WebSphere数据源的JNDI名称。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65592709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档