Spring Security OAuth2.0 认证协议【3】

官方:https://spring.io/projects

视频:https://www.bilibili.com/video/BV1sE411w7NM?p=3

在这里插入图片描述

项目构建

模块关系:

artifactId groupId 类型 备注
v-security cn.vshop.security pom 主模块
v-security-core cn.vshop.security jar 核心业务逻辑
v-security-browser cn.vshop.security jar 浏览器安全特定模块
v-security-app cn.vshop.security jar app相关特定模块
v-security-demo cn.vshop.security jar 样例程序

idea创建Maven多模块项目

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

# v-security

父模块,为其他模块提供环境

pom.xml

platform-bom
spring-cloud-dependencies

选 GA 版本的依赖:

  • GA:General Availability,正式发布的版本,官方推荐使用此版本。在国外都是用GA来说明 release 版本的。
  • PRE: 预览版,内部测试版. 主要是给开发人员和测试人员测试和找BUG用的,不建议使用;
  • SNAPSHOT: 快照版,可以稳定使用,且仍在继续改进版本。
    <dependencyManagement>
	    <!--替我们管理maven依赖版本,避免版本不兼容-->
        <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>

maven 编译插件 指定 JDK版本为 1.8

<build>
    <plugins>
        <!--指定编译版本,指定为JDK1.8-->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.3.2</version>
            <configuration>
                <!-- 源代码使用的JDK版本 -->
                <source>1.8</source>
                <!-- 需要生成的目标class文件的编译版本 -->
                <target>1.8</target>
                <!-- 字符集编码 -->
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
    </plugins>
</build>

检查是否有自动构建父子模块关系,若没有就需要手动构建

<!-- v-security 的 pom 文件中需要有 -->
<modules>
    <module>v-security-core</module>
    <module>v-security-browser</module>
    <module>v-security-app</module>
    <module>v-security-demo</module>
</modules>
<!-- v-security-app、v-security-core、v-security-browser、v-security-demo 的 pom 文件中需要有 -->
    <parent>
        <artifactId>v-security</artifactId>
        <groupId>cn.vshop.security</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>

# v-security-core

pom.xml

Spring cloud oauth2 研究–第一个DEMO

 <!--作为验证服务包含了security 和 oauth2-->
 <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-oauth2</artifactId>
 </dependency>

(上面)这个依赖会为我们引入大量的 jar 包

主要包括:spring-security 相关依赖、和 spring-security-oauth2(重要)

在这里插入图片描述

然后引入两个和存储相关的依赖: jdbcredis

<!--和存储相关的依赖:jdbc/redis,会帮我们做redis和数据库的相关配置-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

注意,这里都是不需要写版本的,原因是父项目中的: spring-plaformspring-cloud 在起作用

引入 spring-social 依赖

做第三方登录,如qq、weixin、github。
(后面用到详细讲)

Spring Social Reference - Getting Spring Social

<dependency>
    <groupId>org.springframework.social</groupId>
    <artifactId>spring-social-core</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.social</groupId>
    <artifactId>spring-social-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.social</groupId>
    <artifactId>spring-social-config</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.social</groupId>
    <artifactId>spring-social-security</artifactId>
</dependency>	

最后,添加三个 apache 提供的 commons 工具包

Apache commons(Java常用工具包)简介

<!--apache commons 工具包-->
<!--提供了许多许多通用的工具类集,提供了一些java.lang中类的扩展功能-->
<dependency>
    <groupId>commons-lang</groupId>
    <artifactId>commons-lang</artifactId>
</dependency>
<!--提供一个类包来扩展和增加标准的 Java Collection框架-->
<dependency>
    <groupId>commons-collections</groupId>
    <artifactId>commons-collections</artifactId>
</dependency>
<!--提供对 Java 反射和自省API的包装-->
<dependency>
    <groupId>commons-beanutils</groupId>
    <artifactId>commons-beanutils</artifactId>
</dependency>

# v-security-app

引用 core 模块作为依赖

注意,这里要指定版本

<!--其他块:v-security-app、v-security-browser中添加-->
<dependencies>
    <dependency>
        <groupId>cn.vshop.security</groupId>
        <artifactId>v-security-core</artifactId>
        <version>${v.security.version}</version>
    </dependency>
</dependencies>

版本在 父模块中指定

<!--父模块:v-security中添加-->
<properties>
     <v.security.version>1.0-SNAPSHOT</v.security.version>
 </properties>

在这里插入图片描述

# v-security-browser

<!--其他块:v-security-app、v-security-browser中添加-->
<dependencies>
    <dependency>
        <groupId>cn.vshop.security</groupId>
        <artifactId>v-security-core</artifactId>
        <version>${v.security.version}</version>
    </dependency>
</dependencies>

引入 spring-session

着这里,浏览器安全建立在 session 的基础上。
因此 需要 spring-session ,帮我们在 集群 环境下,做 session 管理

<!-- core 模块中配置,所以不需要
<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-redis</artifactId>
</dependency>-->
<dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session</artifactId>
</dependency>

# v-security-demo

回顾这幅图, demo 分别依赖 browser 和 app
在这里插入图片描述

先讲 browser,因此,先添加 browser 的依赖

    <dependencies>
        <dependency>
            <groupId>cn.vshop.security</groupId>
            <artifactId>v-security-browser</artifactId>
            <version>${v.security.version}</version>
        </dependency>
    </dependencies>

测试:Hello World

域名 ip 端口 备注
vdb.cn 192.168.64.33 3306 数据库
vshop.cn、localhost 192.168.64.1、127.0.0.1 8080 客户端

编写启动类:

package cn.vshop.security;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author alan smith
 * @version 1.0
 * @date 2020/3/25 0:27
 */
@SpringBootApplication
@RestController
public class DemoApplication {

    /**
     * 启动类
     *
     * @param args
     */
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

    @GetMapping("/hello")
    public String hello() {
        return "hello spring security";
    }
    
}

配置 dataSource(数据源):

application.yml 中添加

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://vdb.cn:3306/vsdb?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false
    username: root
    password: root

否则,报错:Cannot determine embedded database driver class for database type NONE
在这里插入图片描述

配置 Spring Session 的存储(store)

我们先把 spring 的 session 管理给关闭(后面用到再打开)

spring:
  session:
    store-type: none
  # dataSource ... 

否则,会报错(下图):No Spring Session store is configured: set the ‘spring.session.store-type’ property
这个错误的来源是:v-security.browser 中的 spring-session 依赖。
后面做集群的 session 管理的
(点击放大查看)
在这里插入图片描述 在这里插入图片描述

在这里插入图片描述

发布了501 篇原创文章 · 获赞 112 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/LawssssCat/article/details/105080690