OAuth2+springCloud整合笔记(DB管理token策略超详细)

本文档详述了如何使用OAuth2和SpringCloud整合,并通过数据库管理Token策略。步骤包括新建SpringBoot项目,配置OAuth认证服务器,数据库配置,Eureka注册中心的加入,以及JWT模式的Token管理。在JWT模式中,介绍了添加Bean、修改授权配置及测试Token获取的过程。在遇到异常`java.io.EOFException`时,提供了解决方案:确保`oauth_client_details`表中`additional_information`字段不为空。
摘要由CSDN通过智能技术生成

一、新建springboot项目选择pom类型,按自己的需求选择,pom详情如下图:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
还有个maven的build插件图省略

二、新建OAuth认证服务器,创建boot项目省略。。。

pom文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.tends.aopthinkd</groupId>
    <artifactId>thinkd-adminmanage</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>thinkd-adminmanage</name>
    <packaging>jar</packaging>
    <parent>
        <groupId>com.tends</groupId>
        <artifactId>aopthink</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-security</artifactId>
        </dependency>
        <!--<dependency>-->
        <!--    <groupId>org.springframework.security.oauth.boot</groupId>-->
        <!--    <artifactId>spring-security-oauth2-autoconfigure</artifactId>-->
        <!--</dependency>-->
        <!--spring-cloud-starter-oauth2包含了spring-cloud-starter-security-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-oauth2</artifactId>
        </dependency>
        <dependency>
            <groupId>javax.persistence</groupId>
            <artifactId>javax.persistence-api</artifactId>
            <version>2.2</version>
        </dependency>  
    </dependencies>
</project>

数据库配置:

@Component
@ConfigurationProperties(prefix = "spring.datasource.druid")
@Getter
@Setter
public class DruidConfiguration {
   
    private Logger logger = LoggerFactory.getLogger(getClass());
    @Value("${spring.datasource.url}")
    private String url;             //数据库地址
    @Value("${spring.datasource.username}")
    private String username;        //用户名
    @Value("${spring.datasource.password}")
    private String password;        //密码
    @Value("${spring.datasource.driver-class-name}")
    private String driverClassName; //DB驱动器
    private int minIdle;            //最小闲置连接
    private int initialSize;        //初始化连接数量
    private int maxActive;          //最大存活连接
    private long maxWait;           //配置获取连接等待超时的时间

    //打开PSCache,并且指定每个连接PSCache的大小
    private Boolean poolPreparedStatements;
    //每个连接最多缓存多少个SQL  默认 20
    private int maxPoolPrepareStatementPerConnectionSize;
    //配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
    private long timeBetweenEvictionRunsMillis;
    // 配置一个连接在池中最小生存的时间,单位是毫秒
    private long minEvictableIdleTimeMillis;
    // 配置一个连接在池中最大生存的时间,单位是毫秒
    //private long maxEvictableIdleTimeMillis;
    // 检查池中的连接是否仍可用的 SQL语句,druid会连接到数据库执行该SQL
    private String validationQuery;

    // 当程序请求连接,池在分配连接时,是否先检查该连接是否有效
    private Boolean testWhileIdle;
    // 程序 申请 连接时,进行连接有效性检查
    private Boolean testOnBorrow;
    // 程序 返还 连接时,进行连接有效性检查
    private Boolean testOnReturn;
    // 配置监控统计拦截的filters,去掉后监控界面sql将无法统计
    private String filters;
    // 通过这个属性来打开mergeSql功能;慢SQL记录
    //private String connectProperties;
    // 要求程序从池中get到连接后,N秒后必须close,否则druid会强制回收不管该连接中是活动还是空闲 默认为false
    // 防止进程不会进行close而霸占连接 false,当发现程序有未正常close连接时设置为true 打开removeAbandoned功能
    //private Boolean removeAbandoned;
    // 配置removeAbandoned对性能有一些影响,建议怀疑存在泄漏之后再打开,如连接超过30分钟未关闭就会被强行回收,
    // 且日志记录连接申请时的调用堆栈,可在内置监控界面datasource.html查看ActiveConnection StackTrace属性看未关闭连接具体堆栈
    //private long removeAbandonedTimeout=1800L;  //1800秒
    // 当druid强制回收连接后,是否将stack trace 记录到日志中 默认为true 关闭abanded连接时输出错误日志
    //private Boolean logAbandoned;
    // 程序没有close连接且空闲时长超过minEvictableIdleTimeMillis,则会执行validationQuery指定的SQL,
    // 以保证该程序连接不会池kill掉,其范围不超过minIdle指定的连接个数。 默认为true
    //private Boolean keepAlive;

    //asyncInit是1.1.4中新增加的配置,如果有initialSize数量较多时,打开会加快应用启动时间
    private Boolean asyncInit;
    //要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true
    //与maxPoolPreparedStatementPerConnectionSize相同
    private int maxOpenPreparedStatements;

    @Bean
    public DataSource druidDataSource() {
   
        DruidDataSource druidDataSource = new DruidDataSource();
        druidDataSource.setUrl(url);
        druidDataSource.setUsername(username);
        druidDataSource.setPassword(password);
        druidDataSource.setDriverClassName(driverClassName);
        druidDataSource.setMaxActive(maxActive);
        druidDataSource.setInitialSize(initialSize);
        druidDataSource.setMaxWait(maxWait);
        druidDataSource.setMinIdle(minIdle);  
        druidDataSource.setPoolPreparedStatements(poolPreparedStatements);
        druidDataSource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPrepareStatementPerConnectionSize);
        druidDataSource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
        druidDataSource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
        //druidDataSource.setMaxEvictableIdleTimeMillis(maxEvictableIdleTimeMillis);
        druidDataSource.setValidationQuery(validationQuery);

        druidDataSource.setTestWhileIdle(testWhileIdle);
        druidDataSource.setTestOnBorrow(testOnBorrow);
        druidDataSource.setTestOnReturn(testOnReturn);
        druidDataSource.setAsyncInit(asyncInit);
        druidDataSource.setMaxOpenPreparedStatements(maxOpenPreparedStatements);

        try {
   
            druidDataSource.setFilters(this.filters);
        } catch (SQLException e) {
   
            logger.error("!!!!!!think-admin: druid configuration init fail!!!");
        }
        return druidDataSource;
    }

数据库druid监控配置:

@Component
@ConfigurationProperties(prefix = "dbmonitor.druid")
@Getter
@Setter
public class DruidMonitorManage {
   
    private String allowd;
    //private String denyd;        // IP黑名单(存在共同时,deny优先于allow)
    private String loginUser;
    private String loginPwd;
    private String resetEnable="false";   // 禁用HTML页面上的“Reset All”功能

    @Bean
    public ServletRegistrationBean druidStatViewServlet() {
   
        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatView
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: springcloud是一个开源的微服务框架,它基于Spring Boot,并提供了一整套解决方案,用于构建分布式系统中的各个微服务。通过使用springcloud,我们可以轻松实现服务注册与发现、负载均衡、断路器、配置中心等功能,简化了微服务开发和管理的复杂度。 springboot是一个基于Spring的轻量级开发框架,它通过开箱即用的原则,提供了一种快速构建应用程序的方式。使用springboot,我们可以简化繁琐的配置,只需少量的代码即可实现一个功能完整的应用程序,并且可以方便地和其他Spring生态的框架进行集成。 OAuth2是一种授权协议,用于保护Web应用程序、移动应用程序和API的资源。通过OAuth2协议,用户可以授权第三方应用程序访问他们的资源,而无需提供他们的密码。它提供了一种安全且可扩展的机制来处理用户身份验证和授权,并且被广泛应用于各种应用程序中。 Spring Security是一个Java框架,用于提供身份验证和访问控制的功能。它可以轻松地集成到Spring应用程序中,提供了一套强大的API和安全策略,用于保护应用程序免受各种攻击,包括身份验证和授权、会话管理、密码加密等。 Redis是一种内存数据存储系统,它以键值对的形式存储数据,并支持多种数据结构,如字符串、列表、集合、有序集合等。Redis具有高速、持久化和可扩展性等特点,可用于缓存、消息队列、分布式锁等各种场景。在使用Spring框架开发时,我们可以使用Redis作为缓存层,提高应用程序的性能和响应速度。 综上所述,Spring Cloud提供了构建和管理微服务的解决方案,Spring Boot简化了应用程序的开发,OAuth2和Spring Security提供了安全和授权的功能,而Redis作为内存数据存储系统,为应用程序提供了可扩展的缓存和数据存储能力。这些技术和框架相互协作,可以帮助开发者更快速、更安全地构建分布式系统。 ### 回答2: Spring Cloud是一个用于构建分布式系统的开发工具包,它提供了多个子项目来解决分布式系统的常见问题,例如服务注册与发现、配置管理、断路器、负载均衡等。Spring Boot是用于简化Spring应用程序开发的工具,它提供了一种自动配置的方式来快速搭建和运行Spring应用。OAuth2是一个开放标准,用于授权访问特定资源,它允许用户使用某个网站的授权信息来访问其他网站上的受保护资源。Spring Security是一个全面的身份验证和授权框架,它提供了一套安全服务,用于保护Web应用程序中的资源。Redis是一个高性能的键值存储系统,它常被用作缓存、队列、消息中间件等。 结合以上几个技术,可以构建一个基于Spring Cloud的分布式系统,使用Spring Boot快速搭建各个服务,使用Spring Security进行身份验证和授权管理。而OAuth2可以用于保护系统中的资源,通过认证服务器进行用户认证和授权,使得只有授权的用户才能访问相应的资源。Spring Security与OAuth2可以集成使用,通过Spring Security提供的权限管理功能来管理不同角色对资源的访问权限。同时,将Redis作为缓存服务器,可用于提高系统的性能和响应速度。 总之,Spring Cloud、Spring Boot、OAuth2、Spring Security和Redis等技术可以在构建分布式系统时发挥重要作用,帮助我们快速搭建实现各个功能模块,并提供高性能和安全性。 ### 回答3: Spring Cloud是一套基于Spring Boot的微服务框架,它提供了在分布式系统中构建和管理各种微服务的解决方案。它具有服务注册与发现、负载均衡、熔断、服务网关等功能,可以方便地实现微服务架构。 Spring Boot是一个用于快速开发基于Spring框架的应用程序的工具,它简化了Spring应用程序的配置和部署流程。它提供了自动化配置、内嵌服务器、开箱即用的特性,使得我们只需要关注业务逻辑的开发而不用过多关注框架的配置。 OAuth2是一种开放标准的授权协议,它使得用户可以通过授权的方式将与用户相关的信息共享给第三方应用程序。它使用令牌的方式进行授权,具有安全性高、可扩展性好的优点,常用于实现单点登录和授权管理Spring Security是一个用于在Java应用程序中提供身份验证和访问控制的框架。它可以与Spring Boot和Spring Cloud集成,提供了认证、授权、密码加密等功能,帮助我们更好地保护应用程序的安全。 Redis是一种高性能的键值存储系统,它支持多种数据结构,如字符串、列表、哈希表等。它具有高并发读写、持久化、分布式等特点,常用于缓存、消息队列、会话管理等场景。 综上所述,Spring Cloud提供了构建微服务的解决方案,Spring Boot简化了Spring应用程序的开发,OAuth2实现了授权管理Spring Security提供了身份验证和访问控制,而Redis则可以用于缓存和数据存储。这些技术的结合可以帮助我们构建安全、高效的分布式系统。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值