(截止 2019-09-19)
在spring-oauth-server的ISSUE #IAI2E 与 #IP5N9中提到的oauth_access_token表会出现多条相同username的数据的异常情况,
解决办法如下:
1.对 oauth_access_token 表的authentication_id 字段增加唯一索引,创建索引SQL如下:
ALTER TABLE oauth_access_token ADD UNIQUE INDEX authentication_id_unique_index(authentication_id);
若是新建数据库,则直接按照 spring-oauth-server开发要求运行SQL文件(initial_db.ddl)即可(创建表的SQL中已经加了唯一索引)
2.推荐使用将access token 数据存入redis来提升性能与解决此问题,详细请访问 http://andaily.com/blog/?p=19776
monkeyk.com
andaily.com
shengzhaoli.com
wancunle.com
schqst.com
————–
kisso.net
sharego.net
idaas.net
————–
qiuchang8.cn
————–
monkeyk.cc
kisso.cc
wdcy.cc
————–
qc8.me
spring-oauth-server在2019-08-04更新发布了2.0.1版本,
此版本是使用Spring Boot重构实现后的第2个发布版本(2.0.0是第1个),更新内容如下:
2.0.1分支链接:https://gitee.com/shengzhao/spring-oauth-server/tree/2.0.1/
历史更新
在默认的OAuth2场景中,需要发送请求到 /oauth/token 响应AccessToken,这能满足大部分的需求;但在更复杂的场景中,比如在请求时需要传递更多的信息,如deviceId(设备ID),tenantId(租户ID)等,这时默认的实现就不满足要求,需要另写API来实现(同时传递OAuth2需要的参数,如client_id),在后台代码实现中,需要通过代码来生成AccessToken。
在spring-oauth-server的2.0.1版本中,增加了通过代码生成AccessToken的JAVA类,具体如下:
InlineAccessTokenInvoker.java — 生成AccessToken的抽象类,提供许多公共方法实现;
ClientCredentialsInlineAccessTokenInvoker.java — 生成grant_type=client_credentials 时的AccessToken类;
PasswordInlineAccessTokenInvoker.java — 生成grant_type=password 时的AccessToken类;
RefreshTokenInlineAccessTokenInvoker.java — 生成grant_type=refresh_token 时的AccessToken类;
具体的使用示例可查看每个类的单元测试代码。一个示例如下:
调用成功返回 AccessTokenDto 对象,若失败则会抛出OAuth2中的异常对象,如:InvalidGrantException。
相关阅读
处理/oauth/token与/oauth/authorize的Endpoint
没有哪个项目会用到本书中介绍的所有技术。尽管如此,我们很容易通过几个方面辩认出一个项目是否采用了领域驱动设计。标志性的特征是把“理解目标领域并将学到的知识融合到软件中”当作首要任务。其他工作都以它为前提。
他们知道,开发出高质量的,能够清晰反映出领域模型的软件并非易事,因此他们一丝不苟地运用设计技巧。他们也因为遇到障碍而跌倒过,但却始终坚持自己的原则,百折不挠,继续前进。
当下,“复杂性”领域是众多科学的前沿。虽然有才能的软件工程师通常都认为纯粹的技术任务是最有趣,最有挑战性的,但领域驱动设计展现了一个同样富有挑战性(甚至具有更大挑战性)的新领域。
由外行创建复杂软件的时代还远未到来。
创建好的软件是一项需要学习和思考的活动。
但不管怎样都不能仅仅停留在“一切都是对象”这种层次上,至少要分清“螺栓”和“弹簧”。
解决垃圾回收的最佳方式是:给每个生产者(如厂商)降低税费(或成本支出),让每个生产者建立使用后的产品回收机制,由生产者去解决,以最大可能性地约束在生产时考虑如何重复利用,高效回收。
为了满足高性能的要求,spring-oauth-server中增加了使用redis存储 AccessToken的功能,以达到更高的性能要求。
以下配置是将AccessToken存入Redis的参考步骤。
前提:使用spring-oauth-server的config分支,并已经安装Redis服务
1.pom.xml中增加spring-boot的redis dependency.
2.application.properties中增加redis的配置属性
3.配置OAuth2中TokenStore的Redis实现:RedisTokenStore
(prefix值 可根据实际需要进行修改;默认的实现使用JdbcTokenStore)
在以上配置完成后,启动redis服务,并将spring-oauth-server重启后,即完成了将AccessToken配置存入Redis的功能,
测试获取AccessToken后,可在redis中查看到对应的数据,如下所示:
spring-oauth-server的redis配置代码分支:https://gitee.com/shengzhao/spring-oauth-server/tree/config-redis/