[JavaWeb]SpringSecurity-OAuth2.0 统一认证资源分离的配置,用于分布式架构模块化开发的认证体系

Posted 龙猫的番薯地

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[JavaWeb]SpringSecurity-OAuth2.0 统一认证资源分离的配置,用于分布式架构模块化开发的认证体系相关的知识,希望对你有一定的参考价值。

前言

  关于 OAuth2.0的认证体系,翻阅了好多资料,RCF 文档太多,看了一半就看不下去了,毕竟全英文的文档看起来,是有一点让我烦躁,但也对 OAuth2.0的认证流程有了一个基本的概念,之前用 SpringSecurity 做了一个基于 RBAC 的权限管理系统的基础配置,所以对 SpringSecurity 算是比较了解了,于是 OAuth2.0的实现,也想用 SpringSecurity 的来做,心想应该比较简单,然而...事实上,我反反复复,拿起又放弃,放弃又拿起,来来回回折腾了3个多月,才真正的掌握了这个 OAuth2.0插件(OAuth2.0不是一个独立的框架,只是 SpringSecurity 的一个插件而已)。

  官网的 Demo 配置,是基于 JavaConfig 的配置方式,以前都用 XML 的,没接触过 JavaConfig,所以又绕了一圈,把 JavaConfig 方式的所有框架(Spring、SpringMVC、Mybatis、SpringSecurity、Web.xml)基本配置方式都走了一圈, 确实,全代码配置是很酷,很清爽,说实话,今后我也会逐渐往这方面走,因为这个方式比较有代码感,哈哈,但是现在还不行,因为有很多插件啊、特殊的配置方式啊,我都还不清楚要怎么配置,处于安全考虑,还是老老实实的用 XML 的比较好。

 

  额外插播一则我团队的招聘广告:

  阿里巴巴 - 淘系技术部招聘:https://www.cnblogs.com/wuxinzhe/p/11258226.html

 

 项目的说明

  网上有很多,SpringSecurityOAuth2.0的配置文章,但是每个文章,都是将认证服务器和资源服务器写在一起的,并没有将认证与资源分离,也没有讲不同的资源之间如何拆分,然而我们在设计分布式系统的时候,总会以模块化的方式,将不同的资源写成不同的项目,比如,将网站的一个电商系统,专门写成一个项目,把网站中的论坛系统,写成另一个项目,部署的时候,每个项目就可以单独部署,后端系统均以 RESTFull 的方式开放数据接口(RESTFull就是推荐使用 OAuth2.0的方式进行认证管理)。这样的方式来设计程序,最大的优点就是模块之间相互独立,互不干涉,在开发工作当中,可以并行开发,单独维护,同时模块分离出来,今后还可以进行很便利的集群,而不需要修改任何原来的代码,所以对整个项目的扩展性是非常好的,不同的项目之间,可以简单的使用 HttpClient 进行通讯,OAuth2.0五种授权模式当中,有一种授权模式就是为这种资源服务器之间的通讯而设计的。

  认证服务器与资源服务器分离的这个配置方式,同时也实现了“统一认证”的模式,只需要在认真服务器上做了认证,拿到了 Token,就可以访问所有授权的资源服务器。

  接下来,我们开始搭建认证服务器的配置。

   POM

项目用到的框架有这几个:Spring、SpringSecurity、Mybatis

  1 <?xml version="1.0" encoding="UTF-8"?>
  2 <project xmlns="http://maven.apache.org/POM/4.0.0"
  3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5     <modelVersion>4.0.0</modelVersion>
  6     <groupId>Showings</groupId>
  7     <artifactId>OAuthServer</artifactId>
  8     <version>1.0-SNAPSHOT</version>
  9     <build>
 10         <finalName>showings</finalName>
 11         <plugins>
 12             <!--Mybatis 逆向工程插件-->
 13             <plugin>
 14                 <groupId>org.mybatis.generator</groupId>
 15                 <artifactId>mybatis-generator-maven-plugin</artifactId>
 16                 <version>1.3.2</version>
 17                 <configuration>
 18                     <verbose>true</verbose>
 19                     <overwrite>true</overwrite>
 20                 </configuration>
 21             </plugin>
 22             <plugin>
 23                 <groupId>org.apache.maven.plugins</groupId>
 24                 <artifactId>maven-compiler-plugin</artifactId>
 25                 <configuration>
 26                     <source>1.7</source>
 27                     <target>1.7</target>
 28                 </configuration>
 29             </plugin>
 30         </plugins>
 31     </build>
 32     <properties>
 33         <security.version>4.2.2.RELEASE</security.version>
 34         <spring.version>4.3.7.RELEASE</spring.version>
 35         <security.oauth.version>2.0.7.RELEASE</security.oauth.version>
 36     </properties>
 37     <dependencies>
 38         <!-- SpringFramework Start -->
 39         <dependency>
 40             <groupId>org.springframework</groupId>
 41             <artifactId>spring-core</artifactId>
 42             <version>${spring.version}</version>
 43         </dependency>
 44 
 45         <dependency>
 46             <groupId>org.springframework</groupId>
 47             <artifactId>spring-web</artifactId>
 48             <version>${spring.version}</version>
 49         </dependency>
 50 
 51         <dependency>
 52             <groupId>org.springframework</groupId>
 53             <artifactId>spring-oxm</artifactId>
 54             <version>${spring.version}</version>
 55         </dependency>
 56 
 57         <dependency>
 58             <groupId>org.springframework</groupId>
 59             <artifactId>spring-tx</artifactId>
 60             <version>${spring.version}</version>
 61         </dependency>
 62 
 63         <dependency>
 64             <groupId>org.springframework</groupId>
 65             <artifactId>spring-webmvc</artifactId>
 66             <version>${spring.version}</version>
 67         </dependency>
 68 
 69         <dependency>
 70             <groupId>org.springframework</groupId>
 71             <artifactId>spring-aop</artifactId>
 72             <version>${spring.version}</version>
 73         </dependency>
 74 
 75         <dependency>
 76             <groupId>org.springframework</groupId>
 77             <artifactId>spring-context-support</artifactId>
 78             <version>${spring.version}</version>
 79             <!--排除自带的日志工具,从而转向使用SLF4J日志-->
 80             <exclusions>
 81                 <exclusion>
 82                     <groupId>commons-logging</groupId>
 83                     <artifactId>commons-logging</artifactId>
 84                 </exclusion>
 85             </exclusions>
 86         </dependency>
 87 
 88         <dependency>
 89             <groupId>org.springframework</groupId>
 90             <artifactId>spring-expression</artifactId>
 91             <version>${spring.version}</version>
 92         </dependency>
 93         <!-- SpringFramework End -->
 94         <dependency>
 95             <groupId>javax.validation</groupId>
 96             <artifactId>validation-api</artifactId>
 97             <version>2.0.0.Alpha2</version>
 98         </dependency>
 99         <!--数据有效性验证框架-->
100         <dependency>
101             <groupId>org.hibernate</groupId>
102             <artifactId>hibernate-validator</artifactId>
103             <version>6.0.0.Alpha2</version>
104         </dependency>
105         <!--c3p0-->
106         <dependency>
107             <groupId>com.mchange</groupId>
108             <artifactId>c3p0</artifactId>
109             <version>0.9.5.1</version>
110         </dependency>
111         <!--Mybatis-->
112         <dependency>
113             <groupId>org.mybatis</groupId>
114             <artifactId>mybatis</artifactId>
115             <version>3.3.0</version>
116         </dependency>
117         <!--Mybatis分页工具 pageHelper-->
118         <dependency>
119             <groupId>com.github.pagehelper</groupId>
120             <artifactId>pagehelper</artifactId>
121             <version>4.1.6</version>
122         </dependency>
123         <!--分页搭配SQL解析工具-->
124         <dependency>
125             <groupId>com.github.jsqlparser</groupId>
126             <artifactId>jsqlparser</artifactId>
127             <version>0.9.6</version>
128         </dependency>
129         <!--Mybatis Spring整合-->
130         <dependency>
131             <groupId>org.mybatis</groupId>
132             <artifactId>mybatis-spring</artifactId>
133             <version>1.2.3</version>
134         </dependency>
135 
136         <!--mysql Driver-->
137         <dependency>
138             <groupId>mysql</groupId>
139             <artifactId>mysql-connector-java</artifactId>
140             <version>5.1.6</version>
141         </dependency>
142         <dependency>
143             <groupId>jstl</groupId>
144             <artifactId>jstl</artifactId>
145             <version>1.2</version>
146         </dependency>
147         <!-- https://mvnrepository.com/artifact/javax.el/javax.el-api -->
148         <dependency>
149             <groupId>javax.el</groupId>
150             <artifactId>javax.el-api</artifactId>
151             <version>3.0.1-b04</version>
152         </dependency>
153 
154         <!--spring security-->
155         <dependency>
156             <groupId>org.springframework.security</groupId>
157             <artifactId>spring-security-core</artifactId>
158             <version>${security.version}</version>
159         </dependency>
160         <dependency>
161             <groupId>org.springframework.security</groupId>
162             <artifactId>spring-security-web</artifactId>
163             <version>${security.version}</version>
164         </dependency>
165         <dependency>
166             <groupId>org.springframework.security</groupId>
167             <artifactId>spring-security-taglibs</artifactId>
168             <version>${security.version}</version>
169         </dependency>
170         <dependency>
171             <groupId>org.springframework.security</groupId>
172             <artifactId>spring-security-config</artifactId>
173             <version>${security.version}</version>
174         </dependency>
175 
176         <dependency>
177             <groupId>org.springframework.security.oauth</groupId>
178             <artifactId>spring-security-oauth2</artifactId>
179             <version>${security.oauth.version}</version>
180         </dependency>
181 
182         <!--SLF4J日志 start-->
183         <dependency>
184             <groupId>org.slf4j</groupId>
185             <artifactId>slf4j-api</artifactId>
186             <version>1.7.10</version>
187         </dependency>
188         <dependency>
189             <groupId>ch.qos.logback</groupId>
190             <artifactId>logback-classic</artifactId>
191             <version>1.1.2</version>
192         </dependency>
193         <dependency>
194             <groupId>ch.qos.logback</groupId>
195             <artifactId>logback-core</artifactId>
196             <version>1.1.2</version>
197         </dependency>
198         <!--SLF4J日志 end-->
199 
200         <dependency>
201             <groupId>javax.servlet</groupId>
202             <artifactId>javax.servlet-api</artifactId>
203             <version>3.1.0</version>
204         </dependency>
205 
206         <!--Jackson start-->
207         <dependency>
208             <JavaWeb学习总结JavaWeb开发入门

javaweb这个功能怎么实现 ajax

JavaWeb学习笔记总结 目录篇

javaweb项目启动报错

javaweb怎么做一个目录树

JavaWeb学习—JavaWeb简介