上一篇 :Spring Security + OAuth2(1. 概述)
下一篇:Spring Security + OAuth2(3. 服务器配置)
1 环境搭建
- 这里所有的内容仅供参考
- 如果是看视频然后找到我的博客的同学,注意一下,和视频不完全一样,我有做修改。
1.1 父工程搭建
-
新建工程 distributed-security
-
修改 pom.xml 文件
<!-- 统一管理jar包版本 --> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> <junit.version>4.12</junit.version> <log4j.version>1.2.17</log4j.version> <lombok.version>1.18.16</lombok.version> <!--<mysql.version>5.1.47</mysql.version>--> <mysql.version>8.0.22</mysql.version> <druid.version>1.1.16</druid.version> <mybatis.spring.boot.version>1.3.0</mybatis.spring.boot.version> </properties> <!-- 子模块继承之后,提供作用:锁定版本+子modlue不用写groupId和version --> <dependencyManagement> <dependencies> <!--spring boot 2.2.2--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.2.2.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> <!--spring cloud Hoxton.SR1--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Hoxton.SR1</version> <type>pom</type> <scope>import</scope> </dependency> <!--spring cloud alibaba 2.1.0.RELEASE--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>2.2.0.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> <!-- thymeleaf 2.2.2 模板引擎 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> <version>2.2.2.RELEASE</version> </dependency> <!-- MySQL 数据库 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql.version}</version> </dependency> <!-- Druid 数据库 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>${druid.version}</version> </dependency> <!-- mybatis --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>${mybatis.spring.boot.version}</version> </dependency> <!-- mybatis-plus --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.0.6</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-annotation</artifactId> <version>3.0.6</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-extension</artifactId> <version>3.0.6</version> </dependency> <!-- junit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> </dependency> <!-- log4j --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>${log4j.version}</version> </dependency> <!-- lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${lombok.version}</version> <optional>true</optional> </dependency> <!-- fastjson --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.73</version> </dependency> </dependencies> </dependencyManagement> <build> <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) --> <plugins> <plugin> <artifactId>maven-clean-plugin</artifactId> <version>3.1.0</version> </plugin> <plugin> <artifactId>maven-site-plugin</artifactId> <version>3.7.1</version> </plugin> <plugin> <artifactId>maven-project-info-reports-plugin</artifactId> <version>3.0.0</version> </plugin> </plugins> </pluginManagement> <plugins> <!-- 热部署 --> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>2.4.0</version> <configuration> <fork>true</fork> <addResources>true</addResources> </configuration> </plugin> </plugins> </build>
1.2 新建子工程 UAA 认证服务
-
新建 Maven 工程:distributed-security-uaa
-
修改 pom.xml 文件
<dependencies> <!-- nacos --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <!--nacos-config--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> <!-- web-actuator --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- mysql --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <!-- mybatis --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.0.0</version> </dependency> <!-- mybatis-plus --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> </dependency> <!-- lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <!-- fastjson --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> </dependency> <!-- spring security --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-security</artifactId> </dependency> <!-- oauth2 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-oauth2</artifactId> </dependency> <!-- jwt --> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-jwt</artifactId> <version>1.0.10.RELEASE</version> </dependency> <dependency> <groupId>com.nimbusds</groupId> <artifactId>nimbus-jose-jwt</artifactId> <version>8.16</version> </dependency> <!-- hutool --> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.3.5</version> </dependency> <!-- Redis --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <!-- test --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> <!-- Open Feign --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> </dependencies> <build> <resources> <!-- 放开对.jks 文件的限制 --> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> <excludes> <exclude>**/*.jks</exclude> </excludes> </resource> <resource> <directory>src/main/resources</directory> <filtering>false</filtering> <includes> <include>**/*.jks</include> </includes> </resource> </resources> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <phase>package</phase> <goals> <goal>repackage</goal> </goals> </execution> </executions> <configuration> <includeSystemScope>true</includeSystemScope> <mainClass>com.myjob.UaaMain</mainClass> </configuration> </plugin> </plugins> </build>
-
编写配置文件 :application.properties
# 全局变量 # 端口号 myserver.port=53020 # 服务名 myserver.name=uaa-service # 服务器地址 myserver.addr=localhost # nacos 地址 myserver.nacos-addr=${myserver.addr}:8848 # 端口号 server.port=${myserver.port} spring.application.name=${myserver.name} spring.cloud.nacos.discovery.server-addr=${myserver.nacos-addr} spring.cloud.nacos.config.server-addr=${myserver.nacos-addr} spring.cloud.nacos.config.file-extension=yaml # 暴露接口动态刷新 management.endpoints.web.exposure.include=* spring.main.allow-bean-definition-overriding = true spring.http.encoding.enabled = true spring.http.encoding.charset = UTF-8 spring.http.encoding.force = true server.tomcat.remote_ip_header = x-forwarded-for server.tomcat.protocol_header = x-forwarded-proto server.use-forward-headers = true spring.freemarker.enabled = true spring.freemarker.suffix = .html spring.freemarker.request-context-attribute = rc spring.freemarker.content-type = text/html spring.freemarker.charset = UTF-8 spring.mvc.throw-exception-if-no-handler-found = true spring.resources.add-mappings = false # 配置数据源 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://${myserver.addr}:3306/spring_security_demo?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC spring.datasource.username=root spring.datasource.password=123456 spring.thymeleaf.cache=false # 配置 Redis spring.redis.host=${myserver.addr} spring.redis.port=6379 # 配置 Mybatis 的包扫描 mybatis.type-aliases-package=com.demo.entity mybatis.mapper-locations=classpath:mapper/*.xml # 配置 mybatis-plus 相关,配置日志 mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
-
编写主启动类 UaaMain
@SpringBootApplication @EnableDiscoveryClient @EnableFeignClients @EnableAsync public class UaaMain { public static void main(String[] args) { SpringApplication.run(UaaMain.class, args); } }
1.3 新建子工程 Order 资源服务
-
新建 Maven 工程:distributed-security-order
-
修改 pom.xml
<dependencies> <!-- nacos --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <!--nacos-config--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> <!-- feign 负载均衡 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <!-- web-actuator --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <!-- spring boot --> <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> <!-- fastjson --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-security</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-oauth2</artifactId> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-jwt</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <!-- mybatis --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.0.0</version> </dependency> <!-- mybatis-plus --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> </dependency> </dependencies>
-
编写配置文件:application.properties
# 全局变量 # 端口号 myserver.port=53021 # 服务名 myserver.name=order-service # 服务器地址 myserver.addr=localhost # nacos 地址 myserver.nacos-addr=${myserver.addr}:8848 # 端口号 server.port=${myserver.port} spring.application.name=${myserver.name} spring.cloud.nacos.discovery.server-addr=${myserver.nacos-addr} spring.cloud.nacos.config.server-addr=${myserver.nacos-addr} spring.cloud.nacos.config.file-extension=yaml # 暴露接口动态刷新 management.endpoints.web.exposure.include=* spring.main.allow-bean-definition-overriding = true spring.http.encoding.enabled = true spring.http.encoding.charset = UTF-8 spring.http.encoding.force = true server.tomcat.remote_ip_header = x-forwarded-for server.tomcat.protocol_header = x-forwarded-proto server.use-forward-headers = true spring.freemarker.enabled = true spring.freemarker.suffix = .html spring.freemarker.request-context-attribute = rc spring.freemarker.content-type = text/html spring.freemarker.charset = UTF-8 spring.mvc.throw-exception-if-no-handler-found = true spring.resources.add-mappings = false # 配置数据源 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://${myserver.addr}:3306/spring_security_demo?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC spring.datasource.username=root spring.datasource.password=123456 spring.thymeleaf.cache=false # 配置 Redis spring.redis.host=${myserver.addr} spring.redis.port=6379 # 配置 Mybatis 的包扫描 mybatis.type-aliases-package=com.demo.entity mybatis.mapper-locations=classpath:mapper/*.xml # 配置 mybatis-plus 相关,配置日志 mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
-
编写主动类:OrderServer
@SpringBootApplication @EnableDiscoveryClient @EnableFeignClients @EnableAsync public class OrderMain { public static void main(String[] args) { SpringApplication.run(OrderMain.class, args); } }