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


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

项目背景

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

需求描述

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

在这里插入图片描述
在这里插入图片描述

准备

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
抽时间继续写

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值