【问题标题】:Spring Oauth2 JdbcTokenStore Oracle DatabaseSpring Oauth2 JdbcTokenStore Oracle 数据库
【发布时间】:2015-09-20 23:27:35
【问题描述】:

我正在尝试在此处转换 jdbctoken 存储架构 https://github.com/spring-projects/spring-security-oauth/blob/master/spring-security-oauth2/src/test/resources/schema.sql

CREATE TABLE EISBIT.OAUTH_ACCESS_TOKEN
(
  TOKEN_ID           VARCHAR2(256 BYTE),
  TOKEN              CLOB,
  AUTHENTICATION_ID  VARCHAR2(256 BYTE),
  USER_NAME          VARCHAR2(256 BYTE),
  CLIENT_ID          VARCHAR2(256 BYTE),
  AUTHENTICATION     CLOB,
  REFRESH_TOKEN      VARCHAR2(256 BYTE)
)

这个

@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
    endpoints
            .tokenStore(tokenStore())
            .authenticationManager(this.authenticationManager);
}

但我在尝试时遇到了这个异常

2015-07-03 14:34:01.300  WARN 10952 --- [pr-8080-exec-13] o.s.s.o.p.token.store.JdbcTokenStore     : Failed to deserialize access token for b14fa3b1-5a5a-4d0c-9112-416997c2dc83

java.lang.IllegalArgumentException: java.io.StreamCorruptedException: invalid stream header: 00540001
	at org.springframework.security.oauth2.common.util.SerializationUtils.deserialize(SerializationUtils.java:40)
	at org.springframework.security.oauth2.provider.token.store.JdbcTokenStore.deserializeAccessToken(JdbcTokenStore.java:397)
	at org.springframework.security.oauth2.provider.token.store.JdbcTokenStore$2.mapRow(JdbcTokenStore.java:162)
	at org.springframework.security.oauth2.provider.token.store.JdbcTokenStore$2.mapRow(JdbcTokenStore.java:1)
	at org.springframework.jdbc.core.RowMapperResultSetExtractor.extractData(RowMapperResultSetExtractor.java:93)
	at org.springframework.jdbc.core.RowMapperResultSetExtractor.extractData(RowMapperResultSetExtractor.java:60)
	at org.springframework.jdbc.core.JdbcTemplate$1.doInPreparedStatement(JdbcTemplate.java:708)
	at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:644)
	at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:695)
	at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:727)
	at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:737)
	at org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:811)
	at org.springframework.security.oauth2.provider.token.store.JdbcTokenStore.readAccessToken(JdbcTokenStore.java:160)

尝试读取令牌库时出错:(..

【问题讨论】:

  • 该字段是 LONGVARBINARY,它是 BLOB 而不是 CLOB。但是oracle不应该只支持LONGVARBINARY吗?你当初为什么把它改成 CLOB?
  • 将驱动程序更新到最新版本后希望修复

标签: java spring oracle spring-mvc spring-security-oauth2


【解决方案1】:

将CLOB修改为BLOB

CREATE TABLE EISBIT.OAUTH_ACCESS_TOKEN
(
  TOKEN_ID           VARCHAR2(256 BYTE),
  TOKEN              BLOB,
  AUTHENTICATION_ID  VARCHAR2(256 BYTE),
  USER_NAME          VARCHAR2(256 BYTE),
  CLIENT_ID          VARCHAR2(256 BYTE),
  AUTHENTICATION     BLOB,
  REFRESH_TOKEN      VARCHAR2(256 BYTE)
)

【讨论】:

    【解决方案2】:

    我正在处理同样的问题。

    如果有人仍然需要完整的工作架构,请访问 this 链接。

    希望这会有所帮助。

    【讨论】:

      【解决方案3】:

      您必须将其映射到 Oracle 中的 RAW 或 LONG RAW 数据类型。 我们遇到了这个异常,不得不更改 OAUTH 表中的以下字段。

      1. OAUTH_ACCESS_TOKEN

        代币原始

        身份验证 LONG RAW

        REFRESH_TOKEN RAW

      2. OAUTH_REFRESH_TOKEN

        代币原始

        身份验证 LONG RAW

      【讨论】:

        猜你喜欢
        • 2014-05-11
        • 2018-11-21
        • 2017-04-20
        • 1970-01-01
        • 1970-01-01
        • 2019-04-03
        • 1970-01-01
        • 2015-11-14
        • 2021-07-17
        相关资源
        最近更新 更多