使用 Maven Module 搭建spring boot项目(整合Spring Security、Spring Social、spring OAuth)一
文章說明
本系列文章是我的通過購買慕課網中Spring Security技术栈开发企业级认证与授权课程编写的學習筆記
简介
项目环境、组件及目标
开发环境
Jdk1.8、Idea、Mysql、maven module
使用框架组件
spring boot 、spring security、spring social、spring oauth
搭建项目目标
深入理解spring security原理、功能及代码
基于spring security及相关框架独立开发认证授权相关功能
掌握抽象和封装的常见技巧,可以编写可重用的模块拱他人使用
基本概念
Spring Security
Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反转Inversion of Control ,DI:Dependency Injection 依赖注入)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作。
Spring IO platform
Spring IO是构建现代应用程序的一个有凝聚力的版本化平台。这是一个模块化的企业级分布,提供了一组策略依赖关系,同时让开发人员完全控制只部署他们所需的部分。
主要解决问题:
在使用Spring的时候,经常会使用到第三方库,一般大家都是根据经验挑选一个版本号或挑选最新的,随意性较大,其实这是有问题的,除非做过完整的测试,保证集成该版本的依赖不会出现问题,且后续集成其它第三方库的时候也不会出现问题,否则风险较大,且后续扩展会越来越困难,因为随着业务复杂度的增加,集成的第三方组件会越来会多,依赖之间的关联也会也来越复杂。
优点:
Spring IO平台提供了各种Spring项目及其依赖项的版本。通过指定的配置添加到您的构建脚本中,您就可以声明您的依赖关系,而无需担心版本号,保证最大限度的扩展,而且该版本的依赖是经过测试的,可以完美的与其它组件结合使用。
项目架构
airports
| - - airport-core < - - |
| - - pom.xml |
| - - airport-browser - - |(依赖) <-|
| - - pom.xml | |
| - - airport-app - - | <-|
| - - pom.xml |(选择性依赖)
| - - traffic-forecast - - - - - - - |
| - - pom.xml
| - - pom.xml
airports: 项目父模块,只负责管理其下的子项目,只有一个pom文件,并且pom文件中打包方式为
pom
<modules>
<module>airportsCore</module>
<module>airportsBrowser</module>
<module>airportsApp</module>
<module>trafficForecast</module>
</modules>
<packaging>pom</packaging>
<properties>
<com.chuIllusion.version>1.0-SNAPSHOT</com.chuIllusion.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>io.spring.platform</groupId>
<artifactId>platform-bom</artifactId>
<version>Brussels-SR4</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.SR2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
</plugin>
</plugins>
</build>
airport-core: 核心业务逻辑,提供核心通用功能
pom.xml
引入核心包,包括jdbc、aop及一些基本工具类,并且引入核心组件:spring security、spring oauth、spring social
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
</dependency>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
</dependency>
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<!-- spring security/social/oauth -->
<!-- 引用spring security、spring oauth核心 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-oauth2</artifactId>
</dependency>
<!-- spring social -->
<!-- 提供Java 配置 -->
<dependency>
<groupId>org.springframework.social</groupId>
<artifactId>spring-social-config</artifactId>
</dependency>
<!-- 提供社交连接框架和OAuth 客户端支持 -->
<dependency>
<groupId>org.springframework.social</groupId>
<artifactId>spring-social-core</artifactId>
</dependency>
<!-- 提供社交安全支持 -->
<dependency>
<groupId>org.springframework.social</groupId>
<artifactId>spring-social-security</artifactId>
</dependency>
<!-- 管理web应用程序的连接 -->
<dependency>
<groupId>org.springframework.social</groupId>
<artifactId>spring-social-web</artifactId>
</dependency>
</dependencies>
airport-browser: 浏览器相关业务,依赖核心项目,拓展浏览器项目特有的功能
pom.xml
引入核心模块的支持,并拓展浏览器特有的支持,如session
<dependencies>
<dependency>
<groupId>com.chuIllusion</groupId>
<artifactId>airports.core</artifactId>
<version>${com.chuIllusion.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session</artifactId>
</dependency>
<!-- ============================== Thymeleaf模板引擎 ================================= -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
</dependencies>
airport-app: App或前后端分离项目中相关业务,依赖核心项目,拓展了前后端分离项目的功能
pom.xml
引入核心模块的支持,并拓展App或前后端分离项目特有的支持,如使用redis代替session存储
<dependencies>
<dependency>
<groupId>com.chuIllusions</groupId>
<artifactId>airports.core</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
</dependencies>
traffic-forecast: 项目程序,根据项目情况,选择性依赖浏览器模块或App模块
pom.xml
根据需求,引用浏览器核心支持或App核心支持,并且引用编译插件的支持
<dependencies>
<!--<dependency>-->
<!--<groupId>com.chuIllusion</groupId>-->
<!--<artifactId>airports.browser</artifactId>-->
<!--<version>${com.chuIllusions.version}</version>-->
<!--</dependency>-->
<dependency>
<groupId>com.chuIllusion</groupId>
<artifactId>airports.app</artifactId>
<version>${com.chuIllusion.version}</version>
</dependency>
<!-- 引入测试框架 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>1.3.3.RELEASE</version>
<executions>
<execution>
<goals>