java - 将 spring oauth db 从内存迁移到 jdbc

标签 java spring jdbc oauth

我正在尝试将 oauth2 支持添加到我的 java rest 服务中,

我设法让它在内存中工作:

protected static class MyAuthorizationServerConfigurerAdapter extends
            AuthorizationServerConfigurerAdapter {
...
    @Override
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
        clients
            .inMemory()
                .withClient("myapp")
                    .authorizedGrantTypes("password", "refresh_token")
                    .authorities("USER")
                    .scopes("read", "write")
                    .resourceIds(RESOURCE_ID)
                    .secret("mysecret");
        }
...
    }

问题,每次服务器重新启动时,数据库都会丢失。 所以我想将它和现有的独立 SQL 数据库连接起来,有什么想法或指导如何完成吗?

我发现有一个 jdbc 选项,但我找不到让它工作的方法

clients.jdbc(dataSource)

谢谢

最佳答案

您确定要将客户端配置放入数据库吗?这将只允许您动态配置新客户端。

我想你想要的是将你的 token 保存在数据库中,这样如果你重新启动你的服务器,客户端就不会丢失他们的 session 。

这可以用下面的代码来实现:

@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception }
    endpoints.tokenStore(new JdbcTokenStore(dataSource)).userApprovalHandler(userApprovalHandler)
                    .authenticationManager(authenticationManager);
}

下面是创建数据库表的代码:

CREATE TABLE `oauth_access_token` (
  `token_id` varchar(255) DEFAULT NULL,
  `token` blob,
  `authentication_id` varchar(255) DEFAULT NULL,
  `user_name` varchar(255) DEFAULT NULL,
  `client_id` varchar(255) DEFAULT NULL,
  `authentication` blob,
  `refresh_token` varchar(255) DEFAULT NULL
);

CREATE TABLE `oauth_refresh_token` (
  `token_id` varchar(256) DEFAULT NULL,
  `token` blob,
  `authentication` blob
);

来源:https://github.com/spring-projects/spring-security-oauth/blob/master/spring-security-oauth2/src/test/resources/schema.sql

关于java - 将 spring oauth db 从内存迁移到 jdbc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29835444/

相关文章:

java - 如何将纬度和经度从数据库传递到 Google Maps Activity

Java Controller 需要什么代码?

java - 使用 JDBC 连接到 SQL Server 2012 时出现问题

spring - CrudRepository findOne() 和 JpaRepository getOne() 的区别

java - 如何使一台 PC 上的 Oracle 11g 数据库可供另一台 PC 使用

java - 无法写入 MySQL 时重置连接

java - 简单的 Hello world 与 PegDown ?

javascript - netty-socketio : client did not complete upgrade - closing transport

java - JList 水平调整大小导致垂直收缩

java - 如何将 JNDI 名称动态插入 Spring