SpringSecurity学习总结-1 第二章 项目基础模块搭建

17 篇文章 0 订阅

1、代码结构

imooc-security:主模块(父模块):用来管理子模块

imooc-security-core:核心业务逻辑模块

imooc-security-browser:浏览器安全特定代码模块

imooc-security-app:app相关特定代码

imooc-security-demo:样例程序

各模块的位置:

2、imooc-security:主模块

(1)pom.xml配置

①、spring的版本管理(需要注意的是springboot2.x.x版本中已经废弃了使用下列方式对spring相关的jar包进行管理,而是使用spring-boot-starter-parent来管理)

上述解释的来源:在 Spring IO Platform 中的 End of Life 可以看到这么一段话,

要想使用spring的方式对jar包进行管理,点击Learn找到目前最新的正式发布版,点击右侧的 Reference Doc.

在文档里的4.1 Using Spring IO Platform with Maven 可找到

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>io.spring.platform</groupId>
                <artifactId>platform-bom</artifactId>
                <version>Cairo-SR7</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

②、spring-boot-starter-parent的版本管理, 到 springboot 页面的Learn下(此处修改时间:2020年4月15号),查看目前最新的正式发布版,点击右侧的 Reference Doc.

进入 springboot 的参考文档后,点击 Using Spring Boot  

进入Using Spring Boot 页面后,鼠标滚动到 1.2.1. Inheriting the Starter Parent,这里就是需要引用的 spring-boot-starter-parent

引入 spring-boot-starter-parent

<dependencyManagement>

        <dependencies>
            <!-- spring-boot-starter-parent依赖 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-parent</artifactId>
                <version>2.2.4.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
</dependencyManagement>

③、springcloud 的版本管理

到 Spring Cloud ,查看最新的 SpringCloud 的版本控制

在 https://start.spring.io/actuator/info中可以查看最新的SpringCloud 兼容的 springboot 版本,因为本文档于2020年4月15号修改过,所以我项目中使用的是之前的 Hoxton.SR1,所以后面的代码中是 Hoxton.SR1

    "spring-cloud": {
      "Finchley.M2": "Spring Boot >=2.0.0.M3 and <2.0.0.M5",
      "Finchley.M3": "Spring Boot >=2.0.0.M5 and <=2.0.0.M5",
      "Finchley.M4": "Spring Boot >=2.0.0.M6 and <=2.0.0.M6",
      "Finchley.M5": "Spring Boot >=2.0.0.M7 and <=2.0.0.M7",
      "Finchley.M6": "Spring Boot >=2.0.0.RC1 and <=2.0.0.RC1",
      "Finchley.M7": "Spring Boot >=2.0.0.RC2 and <=2.0.0.RC2",
      "Finchley.M9": "Spring Boot >=2.0.0.RELEASE and <=2.0.0.RELEASE",
      "Finchley.RC1": "Spring Boot >=2.0.1.RELEASE and <2.0.2.RELEASE",
      "Finchley.RC2": "Spring Boot >=2.0.2.RELEASE and <2.0.3.RELEASE",
      "Finchley.SR4": "Spring Boot >=2.0.3.RELEASE and <2.0.999.BUILD-SNAPSHOT",
      "Finchley.BUILD-SNAPSHOT": "Spring Boot >=2.0.999.BUILD-SNAPSHOT and <2.1.0.M3",
      "Greenwich.M1": "Spring Boot >=2.1.0.M3 and <2.1.0.RELEASE",
      "Greenwich.SR5": "Spring Boot >=2.1.0.RELEASE and <2.1.14.BUILD-SNAPSHOT",
      "Greenwich.BUILD-SNAPSHOT": "Spring Boot >=2.1.14.BUILD-SNAPSHOT and <2.2.0.M4",
      "Hoxton.SR3": "Spring Boot >=2.2.0.M4 and <2.3.0.BUILD-SNAPSHOT",
      "Hoxton.BUILD-SNAPSHOT": "Spring Boot >=2.3.0.BUILD-SNAPSHOT"
    },

④、 spring-boot-starter-parent 的版本控制和 springcloud 的版本控制整合后的代码

    <dependencyManagement>
        <dependencies>
            <!-- 用于管理spring相关依赖的的版本 保持版本的一致兼容
            (spring已停止使用该方式,而是用spring-boot-starter-parent来控制) -->
            <!--			<dependency>-->
            <!--				<groupId>io.spring.platform</groupId>-->
            <!--				<artifactId>platform-bom</artifactId>-->
            <!--				<version>Cairo-SR7</version>-->
            <!--				<type>pom</type>-->
            <!--				<scope>import</scope>-->
            <!--			</dependency>-->

            <!-- spring-boot-starter-parent依赖 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-parent</artifactId>
                <version>2.2.4.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <!-- 用于管理spring-cloud各个组件的版本 保证spring-cloud各个组件的版本和springboot的一致兼容 -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.SR1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>

    </dependencyManagement>

⑤、完整的pom.xml文件

<?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">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <groupId>imooc.security</groupId>
    <artifactId>imooc-security</artifactId>
    <packaging>pom</packaging>
    <version>1.0.0-SNAPSHOT</version>

    <modules>
        <module>../imooc-security-core</module>
        <module>../imooc-security-app</module>
        <module>../imooc-security-browser</module>
        <module>../imooc-security-demo</module>
    </modules>

    <properties>
        <java.version>1.8</java.version>
        <imooc.security.version>1.0.0-SNAPSHOT</imooc.security.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <!-- 用于管理spring相关依赖的的版本 保持版本的一致兼容
            (spring已停止使用该方式,而是用spring-boot-starter-parent来控制) -->
            <!--			<dependency>-->
            <!--				<groupId>io.spring.platform</groupId>-->
            <!--				<artifactId>platform-bom</artifactId>-->
            <!--				<version>Cairo-SR7</version>-->
            <!--				<type>pom</type>-->
            <!--				<scope>import</scope>-->
            <!--			</dependency>-->

            <!-- spring-boot-starter-parent依赖 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-parent</artifactId>
                <version>2.2.4.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <!-- 用于管理spring-cloud各个组件的版本 保证spring-cloud各个组件的版本和springboot的一致兼容 -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.SR1</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>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>

            <!-- 让Maven构建执行到特定生命周期阶段的时候,通过插件来执行JUnit或者TestNG的测试用例  -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <skip>true</skip>
                </configuration>
            </plugin>

        </plugins>
    </build>

</project>

3、imooc-security-core:核心业务逻辑模块

pom.xml文件内容

<?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">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>imooc.security</groupId>
        <artifactId>imooc-security</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <relativePath>../imooc-security</relativePath>
    </parent>

	<!--  加入后在执行mvn install时jar会保存到security目录下,而不是和父模块在同一个spring目录下 -->
<!--	<groupId>security</groupId>-->
    <artifactId>imooc-security-core</artifactId>

    <dependencies>

        <!-- springboot单元测试 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
<!--            <version>2.2.4.RELEASE</version>-->
            <scope>test</scope>
        </dependency>


        <!-- lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

        <!-- thymeleaf 依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>

        <!-- 阿里巴巴的JSON依赖  -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.58</version>
        </dependency>

        <!-- web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
<!--            <version>2.2.4.RELEASE</version>-->
        </dependency>


        <!-- oauth2(用来引入 oauth和security相关依赖) -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-oauth2</artifactId>
            <!--			<version>2.2.0.RELEASE</version>-->
        </dependency>

        <!-- redis -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
            <!--			<version>2.2.4.RELEASE</version>-->
        </dependency>

        <!-- mybatis 驱动 -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.1</version>
        </dependency>

        <!-- mysql驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>

        <!-- alibaba 数据连接池 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.13</version>
        </dependency>

        <!-- apollo配置中心依赖 -->
        <dependency>
            <groupId>com.ctrip.framework.apollo</groupId>
            <artifactId>apollo-client</artifactId>
            <version>1.0.0</version>
        </dependency>

        <dependency>
            <groupId>com.ctrip.framework.apollo</groupId>
            <artifactId>apollo-core</artifactId>
            <version>1.0.0</version>
        </dependency>

        <!-- jwt -->
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
            <version>0.9.1</version>
        </dependency>

        <!-- spring-social相关依赖 用来实现第三方登录 (已是最新版本的)-->
        <dependency>
            <groupId>org.springframework.social</groupId>
            <artifactId>spring-social-config</artifactId>
            <version>1.1.6.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.social</groupId>
            <artifactId>spring-social-core</artifactId>
            <version>1.1.6.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.social</groupId>
            <artifactId>spring-social-security</artifactId>
            <version>1.1.6.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.social</groupId>
            <artifactId>spring-social-web</artifactId>
            <version>1.1.6.RELEASE</version>
        </dependency>
        <!-- spring-social相关依赖 -->

        <!-- 常用工具类-->
        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.6</version>
        </dependency>

        <dependency>
            <groupId>commons-collections</groupId>
            <artifactId>commons-collections</artifactId>
            <version>3.2.2</version>
        </dependency>

        <dependency>
            <groupId>commons-beanutils</groupId>
            <artifactId>commons-beanutils</artifactId>
            <version>1.9.3</version>
        </dependency>

        <!-- 处理文件上传下载的IO依赖  -->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.5</version>
        </dependency>

        <!-- spring-boot-starter-aop AOP依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
            <!--			<version>2.2.4.RELEASE</version>-->
        </dependency>

        <!-- Java 工具方法 -->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.0.3</version>
        </dependency>

        <!-- 阿里云服务依赖  -->
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-core</artifactId>
            <version>4.1.0</version>
        </dependency>

        <!-- 阿里云短信服务依赖  -->
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
            <version>1.1.0</version>
        </dependency>

        <!-- 热部署 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>

    </dependencies>

</project>

4、imooc-security-browser:浏览器安全特定代码模块

pom.xml文件内容

<?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">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>imooc.security</groupId>
        <artifactId>imooc-security</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <relativePath>../imooc-security</relativePath>
    </parent>

	<!--  加入后在执行mvn install时jar会保存到security目录下,而不是和父模块在同一个spring目录下 -->
<!--	<groupId>security</groupId>-->
    <artifactId>imooc-security-browser</artifactId>

    <dependencies>
        <dependency>
            <groupId>imooc.security</groupId>
            <artifactId>imooc-security-core</artifactId>
            <version>${imooc.security.version}</version>
        </dependency>

        <!-- 浏览器session集群的依赖-->
        <dependency>
            <groupId>org.springframework.session</groupId>
            <artifactId>spring-session</artifactId>
            <version>1.3.5.RELEASE</version>
        </dependency>

        <!-- springboot单元测试 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- 热部署 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>

        <!-- lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

    </dependencies>

</project>

5、imooc-security-app:app相关特定代码

pom.xml文件内容

<?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">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>imooc.security</groupId>
        <artifactId>imooc-security</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <relativePath>../imooc-security</relativePath>
    </parent>

	<!--  加入后在执行mvn install时jar会保存到security目录下,而不是和父模块在同一个spring目录下 -->
<!--	<groupId>security</groupId>-->
    <artifactId>imooc-security-app</artifactId>

    <dependencies>
        <dependency>
            <groupId>imooc.security</groupId>
            <artifactId>imooc-security-core</artifactId>
            <version>${imooc.security.version}</version>
        </dependency>

        <!-- springboot单元测试 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- 热部署 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>

    </dependencies>

</project>

6、imooc-security-demo:样例程序

pom.xml文件内容

<?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">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>imooc.security</groupId>
        <artifactId>imooc-security</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <relativePath>../imooc-security</relativePath>
    </parent>

	<!--  加入后在执行mvn install时jar会保存到security目录下,而不是和父模块在同一个spring目录下 -->
<!--	<groupId>security</groupId>-->
    <artifactId>imooc-security-demo</artifactId>

    <dependencies>

        <dependency>
            <groupId>imooc.security</groupId>
            <artifactId>imooc-security-browser</artifactId>
            <version>${imooc.security.version}</version>
        </dependency>

        <!-- springboot单元测试 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

        <!-- 热部署 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>

        <!-- swagger2 -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>

        <!-- swagger-ui视图 -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
        </dependency>

        <!-- wiremock依赖 -->
        <dependency>
            <groupId>com.github.tomakehurst</groupId>
            <artifactId>wiremock-standalone</artifactId>
            <version>2.26.0</version>
        </dependency>

    </dependencies>

</project>

7、在父模块的上进行 mvn install,将各模块的依赖加进本地仓库中,如果出现以下错误

Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.231 s <<< FAILURE! - in security.core.CoreApplicationTests
security.core.CoreApplicationTests  Time elapsed: 0.23 s  <<< ERROR!

在父模块的pom.xml文件中加入

			<!-- 让Maven构建执行到特定生命周期阶段的时候,通过插件来执行JUnit或者TestNG的测试用例  -->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-surefire-plugin</artifactId>
				<configuration>
					<skip>true</skip>
				</configuration>
			</plugin>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值