3行代码快速实现Spring Boot Oauth2服务功能

 更新时间:2018年04月24日 11:18:38   作者:五毛程序员  
oauthserver是一个基于Spring Boot Oauth2的完整的独立的Oauth服务器。仅仅需要创建相关数据表,修改数据库的连接信息,你就可以得到一个Oauth服务器。这篇文章给大家介绍3行代码快速实现Spring Boot Oauth2服务功能,需要的朋友参考下吧

这里的3行代码并不是指真的只需要写3行代码,而是基于我已经写好的一个Spring Boot Oauth2服务。仅仅需要修改3行数据库配置信息,即可得到一个Spring Boot Oauth2服务。

项目地址https://github.com/jeesun/oauthserver

oauthserver

简介

oauthserver是一个基于Spring Boot Oauth2的完整的独立的Oauth服务器。仅仅需要创建相关数据表,修改数据库的连接信息,你就可以得到一个Oauth服务器。

支持的关系型数据库:

  • PostgreSQL
  • MySQL

已实现的功能:

  1. 集成Spring Boot Oauth2,实现Oauth服务;
  2. token保存到关系型数据库;
  3. 日志记录保存到文件,并按日归档;
  4. 数据库连接信息加密;
  5. 集成Druid数据库连接池。

使用流程

1. 建表

PostgreSQL

请执行src/main/resources/schema-pg.sql,完成数据表的创建和测试数据的导入。

MySQL

请执行src/main/resources/schema-mysql.sql,完成数据表的创建和测试数据的导入。

2. 修改数据库连接信息

在application.yml中,配置着数据库的连接信息。其中,配置项username和password是要经过jasypt加密的,不能直接填明文。加密密钥由jasypt.encryptor.password配置。你需要使用test目录下的UtilTests工具得到加密字符串。

PostgreSQL
# PostgreSQL连接信息
  driver-class-name: org.postgresql.Driver
  url: jdbc:postgresql://127.0.0.1:5432/thymelte?useUnicode=true&characterEncoding=UTF-8
  username: ENC(hTpbG9fq+7P3SntmXuNtDxbtWDqRuPV+)
  password: ENC(abdq6LyOspryFQHCqzEMTxRozyJVjIA4)
MySQL
# MySQL连接信息
  driver-class-name: com.mysql.jdbc.Driver
  url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false
  username: ENC(YiYjVwTulDGN//YaB3KbuA==)
  password: ENC(9oaIJkFgGSDFaHH3OXY63RHWQ+amDmiJ)

3. 运行

现在,一切已准备就绪。运行项目,当程序成功启动时,即表明你已配置成功。

4. 测试

在建表时,我已经向表添加了测试数据。以下请求参数的值,均是测试数据,在数据表中可以找得到。请根据需求到数据表中修改对应的值。

在表oauth_client_details表中,已有一条测试数据。列client_id和client_secret的值,分别对应Basic Oauth的请求参数username和password的值。而列access_token_validity和列refresh_token_validity,分别代表access_token和refresh_token的有效期时间,以秒为单位。测试数据7200和5184000,分别代表2个小时和2个月(60天)。这是一个比较合理的有效期时间的设置,可以参考。

token相关的接口,都需要进行Basic Oauth认证。

1、根据用户名和密码获取access_token

POST http://localhost:8182/oauth/token?grant_type=password&username=jeesun&password=1234567890c

成功示例:

{
  "access_token": "ca582cd1-be6c-4a5a-82ec-10af7a8e06eb",
  "token_type": "bearer",
  "refresh_token": "c24a6143-97c8-4642-88b9-d5c5b902b487",
  "expires_in": 3824,
  "scope": "read write trust"
}

失败示例(用户名或者密码错误)

{
  "error": "invalid_grant",
  "error_description": "Bad credentials"
}

2、检查access_token

GET http://localhost:8182/oauth/check_token?token=ca582cd1-be6c-4a5a-82ec-10af7a8e06eb

成功示例

{
  "aud": [
    "oauth2-resource"
  ],
  "exp": 1524507296,
  "user_name": "jeesun",
  "authorities": [
    "ROLE_ADMIN",
    "ROLE_USER"
  ],
  "client_id": "clientIdPassword",
  "scope": [
    "read",
    "write",
    "trust"
  ]
}

失败示例(access_token已过期)

{
  "error": "invalid_token",
  "error_description": "Token was not recognised"
}

3、根据refresh_token获取新的access_token

POST http://localhost:8182/oauth/token?grant_type=refresh_token&refresh_token=c24a6143-97c8-4642-88b9-d5c5b902b487

成功示例

{
  "access_token": "690ecd7d-f2b7-4faa-ac45-5b7a319478e8",
  "token_type": "bearer",
  "refresh_token": "c24a6143-97c8-4642-88b9-d5c5b902b487",
  "expires_in": 7199,
  "scope": "read write trust"
}

app实践指南

app获取到token信息后,需要保存token信息和请求时间。在传access_token之前,需要检查access_token是否过期。为了减少后台压力,检查access_token是否过期应该是在app本地完成。通过token的keyexpires_in(剩余有效期)的值,以及本地记录的请求时间,和当前时间做对比,可以很方便地判断出access_token是否过期。如果过期了,需要通过refresh_token获取新的access_token。因为access_token的有效期只有2个小时,这个验证是必须的。refresh_token同理。

总结

以上所述是小编给大家介绍的3行代码快速实现Spring Boot Oauth2服务,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • JAVA实现监测tomcat是否宕机及控制重启的方法

    JAVA实现监测tomcat是否宕机及控制重启的方法

    这篇文章主要介绍了JAVA实现监测tomcat是否宕机及控制重启的方法,可实现有效的检测及控制tomcat服务器运行,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-08-08
  • Component和Configuration注解区别实例详解

    Component和Configuration注解区别实例详解

    这篇文章主要为大家介绍了Component和Configuration注解区别实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • eclipse如何搭建Springboot项目详解

    eclipse如何搭建Springboot项目详解

    今天带大家学习eclipse如何搭建Spring boot项目,文中有非常详细的图文解说,对正在学习java的小伙伴们有很好地帮助,需要的朋友可以参考下
    2021-05-05
  • Spring超详细讲解注解开发

    Spring超详细讲解注解开发

    Spring是轻代码而重配置的框架,配置比较繁重,影响开发效率,所以注解开发是一种趋势。本文将通过示例为大家详细讲讲Spring如何实现注解开发,感兴趣的可以学习一下
    2022-08-08
  • Spring中的MultipartFile详解

    Spring中的MultipartFile详解

    这篇文章主要介绍了Spring中的MultipartFile详解,随着Spring框架的崛起,使用Spring框架中的MultipartFile来处理文件也是件很方便的事了,今天就为大家带来剖析MultipartFile的神秘面纱,需要的朋友可以参考下
    2024-01-01
  • java面试题解LeetCode27二叉树的镜像实例

    java面试题解LeetCode27二叉树的镜像实例

    这篇文章主要为大家介绍了java面试题解LeetCode27二叉树的镜像实例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • Java abstract class 与 interface对比

    Java abstract class 与 interface对比

    这篇文章主要介绍了 Java abstract class 与 interface对比的相关资料,需要的朋友可以参考下
    2016-12-12
  • springboot中配置好登录拦截后,swagger访问不了问题

    springboot中配置好登录拦截后,swagger访问不了问题

    这篇文章主要介绍了springboot中配置好登录拦截后,swagger访问不了问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • java获取包下被指定注解的类过程解析

    java获取包下被指定注解的类过程解析

    这篇文章主要介绍了java获取包下被指定注解的类过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • Java中的锁分类的详细介绍

    Java中的锁分类的详细介绍

    这篇文章主要介绍了Java中的锁分类的详细介绍,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09

最新评论