SpringBoot项目 + Maven + 企业微信授权

  • 项目背景
  • 需求描述
    • 准备
    • 一. 建立SpringBoot项目
      • 开始
        • 1.创建新的Maven工程(创建父工程)
        • 2.选择左侧Maven项目,直接下一步,我没有使用提供的选项,不是用也无妨
        • 3.填写项目名称
        • 4.填写工程名字
        • 5.如果目录不存在,点击OK自动创建了
        • 6.父工程创建完成请欣赏
        • 7.删除父工程不需要的目录结构
        • 8.创建一个Maven子模块
        • 9.这时创建的就是子模块
        • 10.这里建立的是子模块,要选择父工程信息
        • 11.看好目录层级,应该在父工程目录下面,没问题点击Finish完成
        • 12.子模块创建完成了,请欣赏
        • 13.我们先配置一下父工程的pom
        • springboot中pom文件详解
        • springboot一些重要 POM 文件的具体说明
        • 添加pom配置-父级依赖
        • 添加pom配置-jar版本号声明配置
        • 添加pom配置-进入jar坐标
        • 添加pom配置-dependencyManagement
        • 14.继续搞子模块,此时此模块目录结构缺少层级,可以手动补全
        • 15.我们在web层创建一个类,随便写个接口测试一下,测试成功那么项目就算搭建成功~
    • 二. 企业微信授权
      • 企业微信授权三个步骤:
        • 准备:
        • 1.获取code参数
        • 2.获取获取access_token
        • 3.通过code和access_token获取用户信息
        • 代码展示:

因公司项目需求,从而开发的此项目,水平有限,此博客仅供参考及个人学习总结,不喜勿喷.
有任何问题可直接私信我,还请多多指教~

项目背景

本项目是一个数据中台-可视化数据分析系统, 通过企业微信->控制台->企业应用入口进入该系统.各个部门负责人进入系统可以查看该部门的基本信息,及各种业绩数据,以可视化的方式进行呈现.各个领导以及负责人可以根据该系统提供的可视化数据进行快速分析决策,迅速调整运营战略,促进企业健康发展.

需求描述

进入该系统,根据当前企业微信登陆用户,进行查询该用户负责的部门信息以及该部门所有业绩数据,及其它报表数据.以图形图表,折线图,数据列表等形式进行呈现(如下图).


准备

1.建立SpringBoot项目
2.准备企业微信: 企业ID(获取Code调用的API中参数名称叫:appid, 获取access_token
调用的API中参数名称叫:corpid),应用授权作用域(参数名称:scope)。

一. 建立SpringBoot项目

本项目使用 IntelliJ IDEA 工具开发,通过Apollo提供远程的配置服务,以达到集群环境统一使用一套动态配置的目的。
环境: JDK 1.8, Maven 3.5.2, Oracle, Redis
工具: IntelliJ IDEA

开始

1.创建新的Maven工程(创建父工程)

双击idea图标,打开软件,点击 Create New Project 创建新的工程.

2.选择左侧Maven项目,直接下一步,我没有使用提供的选项,不是用也无妨

Create from archetype 的说明请点击下方直达(链接可能随时会失效)
链接: IntelliJ IDEA创建Maven项目archetype选什么.

3.填写项目名称

我这项目名字瞎起的,兄弟们尽量按照规范来.
转载: Maven项目命名规范(GroupID、Artifactid)

4.填写工程名字

Project location 仔细看一下项目存放的目录和层级,别放错了地方.

5.如果目录不存在,点击OK自动创建了

6.父工程创建完成请欣赏

7.删除父工程不需要的目录结构

8.创建一个Maven子模块

本项目实际开发,根据需求我创建了三个子模块,博客为了演示,创建一个说明问题就好了.
软件左上角: File >> New >> Module

9.这时创建的就是子模块

还是选中左侧Maven下一步即可

10.这里建立的是子模块,要选择父工程信息



选择好父工程之后 GroupId 和 Version 后,会自动带入父工程的信息
只要填写好子模块项目名称即可

11.看好目录层级,应该在父工程目录下面,没问题点击Finish完成

12.子模块创建完成了,请欣赏

13.我们先配置一下父工程的pom

转载: springboot中pom文件详解
转载: springboot一些重要 POM 文件的具体说明

springboot中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 http://maven.apache.org/xsd/maven-4.0.0.xsd"><!-- pom模型版本 --><modelVersion>4.0.0</modelVersion><!-- 项目信息 --><groupId>demo</groupId><!-- 项目唯一标识 --><artifactId>springboot</artifactId><!-- 项目名 --><version>0.0.1-SNAPSHOT</version><!-- 版本 --><packaging>jar</packaging><!-- 打包方式 (pom,war,jar) --><name>springboot</name><!-- 项目的名称, Maven 产生的文档用 --><description>Demo project for Spring Boot</description><!-- 项目的描述, Maven 产生的文档用 --><!-- 父级项目 --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.7.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><!-- 属性设置 --><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><!-- 编译字符编码为utf-8 --><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><!-- 输出字符编码为UTF-8  --><java.version>1.8</java.version><!-- jdK版本 --></properties><!-- 依赖关系 --><dependencies><!-- 测试 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- springmvc --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- jpa(持久层) --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><!-- mysql(数据库) --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency></dependencies><!-- 编译 --><build><!-- 插件 --><plugins><!-- maven插件 --><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>
springboot一些重要 POM 文件的具体说明
名称 说明
spring-boot-starter 核心 POM,包含自动配置支持、日志库和对 YAML 配置文件的支持。
spring-boot-starter-amqp 通过 spring-rabbit 支持 AMQP。
spring-boot-starter-aop 包含 spring-aop 和 AspectJ 来支持面向切面编程(AOP)。
spring-boot-starter-batch 支持 Spring Batch,包含 HSQLDB。
spring-boot-starter-data-jpa 包含 spring-data-jpa、spring-orm 和 Hibernate 来支持 JPA。
spring-boot-starter-data-mongodb 包含 spring-data-mongodb 来支持 MongoDB。
spring-boot-starter-data-rest 通过 spring-data-rest-webmvc 支持以 REST 方式暴露 Spring Data 仓库。
spring-boot-starter-jdbc 支持使用 JDBC 访问数据库。
spring-boot-starter-security 包含 spring-security。
spring-boot-starter-test 包含常用的测试所需的依赖,如 JUnit、Hamcrest、Mockito 和 spring-test 等。
spring-boot-starter-velocity 支持使用 Velocity 作为模板引擎。
spring-boot-starter-web 支持 Web 应用开发,包含 Tomcat 和 spring-mvc。
spring-boot-starter-websocket 支持使用 Tomcat 开发 WebSocket 应用。
spring-boot-starter-ws 支持 Spring Web Services。
spring-boot-starter-actuator 添加适用于生产环境的功能,如性能指标和监测等功能。
spring-boot-starter-remote-shell 添加远程 SSH 支持。
spring-boot-starter-jetty 使用 Jetty 而不是默认的 Tomcat 作为应用服务器。
spring-boot-starter-log4j 添加 Log4j 的支持。
spring-boot-starter-logging 使用 Spring Boot 默认的日志框架 Logback。
spring-boot-starter-tomcat 使用 Spring Boot 默认的 Tomcat 作为应用服务器。

本项目添加的jar可能有多余的,多了无妨(仅供参考,各位大哥们如果用的话,多的可删掉)
重要配置文件就简单说明一下,其他每个jar的作用就不做多解释了,根据每个项目需求不一.

添加pom配置-父级依赖

    <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.2.RELEASE</version><relativePath/></parent>
添加pom配置-jar版本号声明配置

properties标签的作用:在标签内可以把版本号作为变量进行声明,后面dependency中用到版本号时可以用${变量名}的形式代替,这样做的好处是:当版本号发生改变时,只有更新properties标签中的变量就行了,不用更新所有依赖的版本号

添加pom配置-进入jar坐标

    <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-rest</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></exclusion></exclusions></dependency><dependency><groupId>com.oracle</groupId><artifactId>ojdbc6</artifactId><version>${oracle.version}</version></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>${mybatis.version}</version><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>fluent-hc</artifactId><version>${fluent-hc.version}</version></dependency><dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId></dependency><dependency><groupId>com.ctrip.framework.apollo</groupId><artifactId>apollo-client</artifactId><version>${apollo.version}</version></dependency><dependency><groupId>com.codingapi.txlcn</groupId><artifactId>txlcn-tc</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></exclusion></exclusions></dependency><dependency><groupId>com.codingapi.txlcn</groupId><artifactId>txlcn-txmsg-netty</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></exclusion><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-undertow</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-sleuth-zipkin</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>${commons-lang3.version}</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j2</artifactId></dependency><dependency><groupId>com.lmax</groupId><artifactId>disruptor</artifactId><version>${disruptor.version}</version></dependency><dependency><groupId>com.szkingdom.kwis</groupId><artifactId>security</artifactId><version>${security.version}</version></dependency><dependency><groupId>commons-httpclient</groupId><artifactId>commons-httpclient</artifactId><version>3.1</version></dependency><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>fluent-hc</artifactId><version>4.5.5</version></dependency><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpmime</artifactId></dependency></dependencies>
添加pom配置-dependencyManagement

Maven中的dependencyManagement元素提供了一种管理依赖版本号的方式。在dependencyManagement元素中声明所依赖的jar包的版本号等信息,那么所有子项目再次引入此依赖jar包时则无需显式的列出版本号。Maven会沿着父子层级向上寻找拥有dependencyManagement 元素的项目,然后使用它指定的版本号。
转载: dependencyManagement使用简介

以上,父工程pom配置完成

14.继续搞子模块,此时此模块目录结构缺少层级,可以手动补全

刚创建好是这样的:

在java目录上方右键: New >> Package
没有发现 Package 选项 ???

先这样操作一下:
在java目录上方右键: Mark Directory as >> Sources Root
给这个目录改为资源文件,在按照上一步操作就可以了.

此时就有了,你会发现该文件夹还变成了绿色

包名尽量规范

补齐后的目录:
绿色框框是我们补全的包路径和目录
红色是又新建的标准目录结构,可能某些命名名字不太一样,无妨(就是那三层)
灰色箭头指向的是创建的一个启动类,Spring Boot是main方法启动
转载: Java—三层架构 MVC SpringBoot基本框架

controller 包名我改了一下,现在叫web,都一样,这两个叫哪个都无妨,看心情

在resources目录添加配置文件(本实际项目使用的Apollo配置文件,需要在文件中配置个apollo地址),如下

15.我们在web层创建一个类,随便写个接口测试一下,测试成功那么项目就算搭建成功~

启动main方法:

写了三个接口:
1.简单的调用就行
2.Rest风格传参调用
3.普通方式参数拼接调用

测试结果:
1.简单调用结果

2.Rest风格传参调用结果

3.普通方式参数拼接调用结果

//TODO
工程有点问题,启动报错,必须添加eureka地址才不报错,有时间在完善,先略过…

二. 企业微信授权

链接: 企业微信API

企业微信授权三个步骤:
准备:

企业ID:
每个企业都拥有唯一的corpid,获取此信息可在管理后台“我的企业”-“企业信息”下查看“企业ID”(需要有管理员权限)
获取access_token调用的API中参数名称叫:corpid
获取code调用的API中参数名称叫:appid

应用授权作用域(参数名称:scope)
secret是企业应用里面用于保障数据安全的“钥匙”,每一个应用都有一个独立的访问密钥,为了保证数据的安全,secret务必不能泄漏。
自建应用secret,在管理后台->“应用与小程序”->“应用”->“自建”,点进某个应用即可看到。

1.获取code参数

请求方式:GET(HTTPS)
请求地址:https://open.weixin.qq.com/connect/oauth2/authorize?appid=CORPID&redirect_uri=REDIRECT_URI&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect

2.获取获取access_token

请求方式: GET(HTTPS)
请求地址: https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=ID&corpsecret=SECRET

3.通过code和access_token获取用户信息
代码展示:

//TODO
抽时间继续写

SpringBoot项目 + Maven + 企业微信登陆授权登陆相关推荐

  1. python实现网页微信登陆_django 微信网页授权登陆的实现

    一.准备工作 0x00 开发前准备 服务号!!! 微信认证. 备案过的域名. 服务器. 0x01 手动触发dns更新 0x02 配置业务域名 0x03 将服务器请求转发到本地 修改服务器的 /etc/ ...

  2. uniapp项目上企业微信应用经历

    uniapp项目上企业微信应用经历 前言 一.背景 二.项目结构 前端要做的事 一.和后端交流建立测试应用 二.配置sdk 三.开发者工具 主要需求和开发建议 一.主要需求 1.手势返回 2.标题栏 ...

  3. 企业微信中授权小程序

    授权的时候先判断当前小程序运行环境 使用企业微信专有接口wx.getSystemInfo if (res["environment"]=='wxwork') {// 企业微信环境w ...

  4. java集成企业微信完成授权登录

    java集成企业微信完成授权登录 文章目录 前言 一.背景 二.使用步骤 1.前端请求链接获取Code 2.后端接收Code,请求微信链接完成返回用户信息 总结 前言 java集成企业微信完成授权登录 ...

  5. 企业微信应用授权,第一次不授权手机号后如何再次开启

    文章目录 前言 一.关于企业微信应用授权 1.新建一个应用 2.企业微信应用授权 二.第一次拒绝后如何手动开启 总结 前言 简单记录一下: 最近做了几个企业微信应用授权web,和普通微信公众号授权差不 ...

  6. django 微信网页授权登陆实战

    ? Author: 廖长江 ? Link: https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842 ⏱ Publis ...

  7. 微信官方项目,企业微信考勤机,行动起来月入三万+

    前段时间做了一个项目调查,很多社群的小伙伴表示企业微信这个项目不错,并且自己已经通过这个项目赚到了一万多,相信大家对微信都很熟悉了,企业微信就是企业专用的微信,对标的是阿里的钉钉以及字节跳动的飞书, ...

  8. .netMVC企业微信网页授权+注册全局过滤器

    微信网页授权 达到效果:企业应用只能在微信中查看,在浏览器中打开企业页面,显示无权限! 原理,用session记录用户,如果用户已经通过微信授权,记录@Session["UserId&quo ...

  9. 企业微信网页授权及JS-SDK碰到检查域名所有权不通过的问题

    在设置"网页授权及JS-SDK"可信域名时,一直不成功,现在显示:"检查域名所有权不通过" 申请域名校验 点击打开申请域名校验,输入域名,下载对应的文件: 拷贝 ...

最新文章

  1. java规约下载_Java规约 PDF 下载
  2. 设置IP安全策略将***阻杀在端口外
  3. Servlet中转发和重定向的路径问题以及表单提交路径问题
  4. element ui 前台模板_用 Vue+ElementUI 搭建后台管理极简模板
  5. linux 系统中的文件权限
  6. 【kafka】 kafka 2.3 版本 生产者和消费者事务 案例
  7. 是什么意思网络语_网络语“随薪锁欲”是什么意思?
  8. DataTable转为JSON数据格式代码
  9. 区块链+高薪,你还等什么?
  10. RS编码过程通俗理解
  11. Windows远程控制时,输入账号密码无法登录,提示“用户名或密码错误”问题(已解决)
  12. 批处理命令--call和start
  13. 计算机学报论文审稿流程,计算机学报投稿.docx
  14. e3是合法浮点数吗_下面四个选项中,均是合法浮点数的是()
  15. ICPC 2017 Daejeon-Slot Machines
  16. 解决使用阿里巴巴iconfont页面显示小方块问题
  17. 抖音3D旋转相册 (源码下载)
  18. 使用HttpClient下载图片常用代码,以及下载失败原因
  19. 深度学习-扩张卷积(dilated convolution)
  20. 学好SEO需要掌握哪些知识要点?

热门文章

  1. 前缀表达式,中缀表达式和后缀表达式的定义与联系(超详细)
  2. 15f104 c语言编程,DIY插座 STC15F104单片机红外遥控继电器(附程序源码)
  3. 联想小新V1000安装并激活win7
  4. js实现字符串中去除空格
  5. 一条计算机指令规定其操作数,在计算机指令中,规定其所执行操作功能的部分称为 A地址码 B 操作码 C操作数 D源操作数...
  6. 2022/10/11 友塔游戏 服务端
  7. 有向无环图的应用——拓扑排序
  8. python中进行数据分割的函数
  9. python循环语句有什么语句和for语句,Python循环语句for和while
  10. Python循环语句_for循环