微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – 将spring oauth db从inmemory迁移到jdbc

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

我已经做好了让它在内存中运行:

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");
        }
...
    }

问题是,每次服务器重启db都会丢失.
所以我想连接它和现有的独立sql数据库,任何想法或指导如何做到这一点?

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

clients.jdbc(dataSource)

谢谢

解决方法:

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

我认为您想要的是将您的令牌保存在数据库中,这样如果您重新启动服务器,客户端将不会丢失其会话.

这可以使用以下代码

@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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐