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

异常Stacktrace:
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中配置/实现容器管理身份验证别名的帮助都将不胜感激。
发布于 2021-01-07 15:25:26
当您的代码(或代表它执行的任何第三方代码)使用资源引用查找数据源时,应用容器管理身份验证,该资源引用将资源身份验证指定为容器,或者将资源身份验证保留在未指定的位置,在这种情况下,它默认为容器。
组件管理身份验证适用于您的代码(或代表它执行的任何第三方代码)在没有资源引用的情况下查找数据源,或者使用指定资源身份验证为应用程序的资源引用。
下面是一些使用容器身份验证的资源引用示例:
// 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部署描述符中定义的资源引用的示例:
<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名称。
https://stackoverflow.com/questions/65592709
复制相似问题