1 Star 0 Fork 791

luman1991 / open-cloud

forked from 整洁架构 / open-cloud 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

Nacos SpringCloud SpringBoot iview vue License

微服务开放平台


简介

搭建基于OAuth2的开放平台、为APP端提供统一接口管控平台、为第三方合作伙伴的业务对接提供授信可控的技术对接平台.

  • 统一API网关、访问鉴权、参数验签、外部调用更安全.
  • 分布式架构,基于服务发现,Fegin(伪RPC)方式内部调用,更便捷.
  • 深度整合SpringCloud+SpringSecurity+Oauth2,更细粒度、灵活的ABAC权限控制.
  • 前后端分离方式开发应用,分工合作更高效!
  • 代码合理封装、简单易懂、

演示地址

默认登录账号:admin 123456 测试登录账号:test 123456

欢迎吐槽

学习交流群:760809808 open-cloud学习交流群
760809808

代码仓库

请随手给个Star! 感谢支持!

服务端源码-码云

服务端源码-Github

前端ui源码

使用手册

代码结构

open-cloud
├── docs
    ├── bin           -- 执行脚本  
    ├── config        -- 公共配置,用于导入到nacos配置中心   
    ├── generator     -- mapper生成器  
    ├── sql           -- sql文件
    
├── opencloud-common  -- 公共类和jar包依赖
    ├── opencloud-common-core    -- 提供微服务相关依赖包、工具类、全局异常解析等...
    ├── opencloud-common-starter -- SpringBoot自动扫描
    
├── opencloud-gateway  -- API网关模块
    ├── opencloud-gateway-client    -- API网关接口
    ├── opencloud-gateway-provider  -- API网关(port = 8888)  
    
├── opencloud-upms    --  通用权限模块
    ├── opencloud-base-client    -- 平台基础服务接口
    ├── opencloud-base-provider  -- 平台基础服务(port = 8233)  
    ├── opencloud-auth-client    -- 平台认证服务接口
    ├── opencloud-auth-provider  -- 平台认证服务(port = 8211)  
    
├── opencloud-app    -- 应用服务模块
    ├── opencloud-admin-provider  -- 运营后台服务(port = 8301)  
    ├── app-uaa-provider-demo  -- 移动应用用户认证中心(多认证中心演示)(port = 7211)  
     
├── opencloud-msg     -- 公共消息模块 
    ├── opencloud-msg-client    -- 消息服务接口
    ├── opencloud-msg-provider  -- 消息服务(port = 8266)  
    
├── opencloud-scheduler         -- 任务调度模块 
    ├── opencloud-scheduler-client    -- 任务调度接口
    ├── opencloud-scheduler-provider  -- 任务调度服务(port = 8501)  
    
├── opencloud-bpm     -- 公共工作流模块...  
    ├── opencloud-bpm-client   -- 工作流接口
    ├── opencloud-bpm-provider -- 工作流服务(port = 8255)
     

系统结构图

springcloud

功能预览

数据模型

基础权限模型

base

网关访问限制模型

gateway

快速开始

上手难度:★★★

本项目基于springCloud打造的分布式快速开发框架. 需要了解SpringCloud,SpringBoot开发,分布式原理。

注:Nacos版本选择V0.9.0以下版本. 1.0.0以上版本暂未测试!

  1. 准备环境

    • Java1.8
    • 阿里巴巴Nacos服务发现和注册中心 nacos.io
    • Redis
    • RabbitMq (需安装rabbitmq_delayed_message_exchange插件 下载地址
    • Mysql
    • Maven
    • Nodejs
  2. 导入sql脚本

    • docs/sql/oauth2.sql
    • docs/sql/base.sql
    • docs/sql/gateway.sql
    • docs/sql/quartz.sql && scheduler.sql
  3. 导入Nacos公共配置

    • 访问 http://localhost:8848/nacos/index.html
    • 新建配置
      • docs/config/db.properties > db.properties
      • docs/config/rabbitmq.properties > rabbitmq.properties
      • docs/config/redis.properties > redis.properties
      • docs/config/common.properties > common.properties
  4. 修改主pom.xml

    初始化

        maven clean install

    本地启动,默认不用修改

        <!--Nacos配置中心地址-->
        <config.server-addr>127.0.0.1:8848</config.server-addr>
        <!--Nacos配置中心命名空间,用于支持多环境.这里必须使用ID,不能使用名称,默认为空-->
        <config.namespace></config.namespace>
        <!--Nacos服务发现地址-->
        <discovery.server-addr>127.0.0.1:8848</discovery.server-addr>
  5. 本地启动

    • AuthApplication (必须)
    • BaseApplication (必须)
    • GatewayApplication (必须)
    • AdminApplication (结合运营后台) 4个服务启动成功后。就可以依赖这些服务进行微服务开发了。
      访问 http://localhost:8888
  6. 前端启动

        npm install 
        npm run dev

    访问 http://localhost:8080

  7. 项目打包部署

    maven多环境打包

      mvn clean install package -P {dev|test|online}

    项目启动

    ./docs/bin/startup.sh {start|stop|restart|status} open-base-provider.jar
    ./docs/bin/startup.sh {start|stop|restart|status} open-auth-provider.jar
    ./docs/bin/startup.sh {start|stop|restart|status} open-gateway-provider.jar
    ./docs/bin/startup.sh {start|stop|restart|status} open-admin-provider.jar

集成开发

1.创建新maven项目

      <!-- 引入公共包 -->
      <dependency>
                 <artifactId>opencloud-common-starter</artifactId>
                 <groupId>com.github.lyd</groupId>
                 <version>${opencloud.common.version}</version>
      </dependency>

2.配置 bootstrap.properties 或bootstrap.yml

     #服务器配置
     server.port=4560
     #spring配置
     spring.profiles.active=${profile.name}
     spring.application.name=my-service
     #Nacos配置中心
     spring.cloud.nacos.config.server-addr=127.0.0.1:8848
     #Nacos共享配置
     spring.cloud.nacos.config.shared-dataids=common.properties,db.properties,redis.properties,rabbitmq.properties
     spring.cloud.nacos.config.refreshable-dataids=common.properties
     spring.cloud.nacos.config.namespace=${config.namespace}
     #Nacos服务发现
     spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
     spring.cloud.nacos.discovery.metadata.name=消息服务
     
     # springCloud资源服务器默认配置,默认使用common公共的客户端ID。也可以使用新的客户端ID
     security.oauth2.client.client-id=${opencloud.common.client-id}
     security.oauth2.client.client-secret=${opencloud.common.client-secret}
     security.oauth2.client.scope=${opencloud.common.scope}
     security.oauth2.client.access-token-uri=${opencloud.common.access-token-uri}
     security.oauth2.client.user-authorization-uri=${opencloud.common.user-authorization-uri}
     security.oauth2.resource.token-info-uri=${opencloud.common.token-info-uri}
     security.oauth2.resource.user-info-uri=${opencloud.common.user-info-uri}

     #自定义API文档
     opencloud.swagger2.enabled=true
     opencloud.swagger2.title=消息服务
     opencloud.swagger2.description=消息服务
  1. 创建MyServiceApplication.java
         //开启feign RPC远程调用
        @EnableFeignClients
        // 开启服务发现
        @EnableDiscoveryClient
        @SpringBootApplication
        public class MyServiceApplication {
        
            public static void main(String[] args) {
                SpringApplication.run(MyServiceApplication.class, args);
            }
        }

4.创建ResourceServerConfiguration.java 资源服务配置

     @Configuration
     @EnableResourceServer
     public class ResourceServerConfiguration extends ResourceServerConfigurerAdapter {
         @Autowired
         private ResourceServerProperties properties;
     
         @Override
         public void configure(ResourceServerSecurityConfigurer resources) throws Exception {
             // 构建远程获取token,这里是为了支持自定义用户信息转换器
             resources.tokenServices(OpenHelper.buildRemoteTokenServices(properties));
         }
     
         @Override
         public void configure(HttpSecurity http) throws Exception {
             http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED)
                     .and()
                     .authorizeRequests()
                     // 内部访问直接放行
                     .antMatchers("/v1/**").permitAll()
                     // 只有拥有actuator权限可执行远程端点
                     .requestMatchers(EndpointRequest.toAnyEndpoint()).hasAnyAuthority(CommonConstants.AUTHORITY_ACTUATOR)
                     .anyRequest().authenticated()
                     .and()
                      //认证鉴权错误处理,为了统一异常处理。每个资源服务器都应该加上。
                     .exceptionHandling()
                     .accessDeniedHandler(new OpenAccessDeniedHandler())
                     .authenticationEntryPoint(new OpenAuthenticationEntryPoint())
                     .and()
                     .csrf().disable();
         }
     
     }

5.启动项目

多认证中心

  1. 平台系统用户认证中心(opencloud-auth-provider)
  2. 移动应用用户认证中心(app-uaa-provider-demo)
  3. 用户认证中心2 - 用户认证中心2
  4. 用户认证中心N - 根据实际应用可创建多个用户中心

针对不同应用的用户数据是单独存储,所以需要建立不同的认证中心提供用户认证。

  • 采用oauth2统一协议,每个APP拥有独立的认证授权中心.
  • 区分用户数据源
  • 共享客户端oauth_client_details信息.
  • 统一方法获取OpenHelper.getAuthUser().认证中心标识-authCenterId.
  • 个性定制,可单独提供手机验证码等方式登陆.

第三方接口调用

1.创建应用信息

创建应用信息

2.配置开发信息

配置开发信息

3.授权功能,默认必须勾选获取当前登录信息接口

授权功能

4.使用postman测试调用

例: 应用信息生成的 AppId: 1553588629729 AppSecret: 1a616ba3f91141efa1c4f4a1ce725e2c

  1. 多认证中心,密码模式
    移动应用用户认证中心:localhost:7211/oauth/token
  • 首先配置客户端密码 输入图片说明
  • 输入用户username和password 输入图片说明
  • 获取用户信息 输入图片说明
  1. 授权码模式(authorization_code) 需要用户认证
  • 获取code 浏览器访问
 http://localhost:8211/oauth/authorize?response_type=code&client_id=1553588629729&redirect_uri=http://www.baidu.com

未登录将进入登录页,输入系统用户登录信息 输入图片说明 用户确认授权信息 输入图片说明 重定向到回调地址,获得code 输入图片说明

  • 使用postman通过code获取access_token, 输入图片说明

  • 使用access_token获取已授权资源 输入图片说明

  1. 客户端模式(client_credentials)
 http://localhost:8211/oauth/token?grant_type=client_credentials&client_id=1553588629729&client_secret=1a616ba3f91141efa1c4f4a1ce725e2c
  • 获取客户端token 输入图片说明
  • 访问未授权资源提示权限不足! 输入图片说明
  • 访问已授权资源,正常返回数据(如果授权完,还提示权限不足,由于上次令牌存在缓存信息,重新获取token即可) 输入图片说明

更新日志

v-1.0.0 2019-03-18
    1. 重构项目结构
    2. 重构表结构
    3. 重构授权逻辑
    4. 提取公共配置,并迁移到Nacos配置中心
    5. 优化功能
The MIT License (MIT) Copyright (c) 2018 刘亚都 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

ABAC权限控制(兼容RBAC)基于SpringCloud2.0+,SpringSecurity,Oauth2,nacos服务发现和配置管理.统一API网关,在线调试文档,身份认证,接口鉴权,限流等。搭建基于API的生态体系,微服务架构的企业级开放平台,利于业务扩容。并提供基于vue.js开发的平台运维系统,界面美观,易操作。项目结构清晰,简单易懂,代码合理封装.开箱即用。 展开 收起
Java
MIT
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Java
1
https://gitee.com/null_982_9415/open-cloud.git
git@gitee.com:null_982_9415/open-cloud.git
null_982_9415
open-cloud
open-cloud
master

搜索帮助