OAUTH2是一种安全的授权框架,其原理在网上有许多文章上可以看到。但从实践角度,好的文章比较少。SpringSecurity框架本身是支持OAUTH2的,所以下面通过使用SpringSecurity框架做个DEMO,从代码级别体验下OAUTH2。

  还是先创建一个SpringBoot的项目,然后添加相应的依赖(可以看出springCloud对oatuth2已经有了很好的支持)

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring-security-oauth2-autoconfigure.version>2.1.0.RELEASE</spring-security-oauth2-autoconfigure.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.security.oauth.boot</groupId>
<artifactId>spring-security-oauth2-autoconfigure</artifactId>
<version>${spring-security-oauth2-autoconfigure.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-oauth2</artifactId>
</dependency>
</dependencies>

添加启动类

@SpringBootApplication
@EnableAuthorizationServer //这个注解也是根据Springcloud的惯例进行添加
public class AuthorizationApp
{
public static void main( String[] args )
{
SpringApplication.run(AuthorizationApp.class, args) ;
}
}

至于application.yml文件暂时啥都没配,启动 AuthorizationApp 实例后,在8080默认端口启动了web服务,按着对OAUTH协议的理解,这样应该是启动了OAUTH2的authorizagion server。

下面先分析下,会加载哪些配置:

一. 由@EnableAuthorizationServer注解引出的配置

查看@EnableAuthorizationServer注解源码,如下:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import({AuthorizationServerEndpointsConfiguration.class, AuthorizationServerSecurityConfiguration.class})
public @interface EnableAuthorizationServer { }

可以看到其导入了两个配置类 :AuthorizationServerEndpointsConfiguration , AuthorizationServerSecurityConfiguration

根据@EnableAuthorizationServer的注释可知,这个authorization server暴露出两个http endpoint给我们调用,分别是 /oauth/authorize (实现类AuthorizationEndpoint)和 /oauth/token (实现类TokenEndpoint

二. 自动配置类 OAuth2AutoConfiguration

这是由 依赖的spring-security-oauth2-autoconfigure导入的,OAuth2AutoConfiguration的源码

@Configuration
@ConditionalOnClass({ OAuth2AccessToken.class, WebMvcConfigurer.class })
@Import({ OAuth2AuthorizationServerConfiguration.class,
OAuth2MethodSecurityConfiguration.class, OAuth2ResourceServerConfiguration.class,
OAuth2RestOperationsConfiguration.class })
@AutoConfigureBefore(WebMvcAutoConfiguration.class)
@EnableConfigurationProperties(OAuth2ClientProperties.class)
public class OAuth2AutoConfiguration { private final OAuth2ClientProperties credentials; public OAuth2AutoConfiguration(OAuth2ClientProperties credentials) {
this.credentials = credentials;
} @Bean
public ResourceServerProperties resourceServerProperties() {
return new ResourceServerProperties(this.credentials.getClientId(),
this.credentials.getClientSecret());
} }

由源码可知,又引入了几个配置类:

   OAuth2AuthorizationServerConfiguration.class,
OAuth2MethodSecurityConfiguration.class,
OAuth2ResourceServerConfiguration.class,
OAuth2RestOperationsConfiguration.class

从以上分析来看,似乎有两套配置参与了OAuth2的使用,究竟是哪一套在起作用,还是两套在合作着起作用呢,请看后续分析。

使用SpringSecurity体验OAUTH2之一 (入门1)的更多相关文章

  1. 使用SpringSecurity体验OAuth2 (入门2)

    本文继续使用SpringSecurity从实战角度对OAuth2进行体验,上一篇 搭建了项目环境,并对配置做了初步分析,分析发现会有两套配置可能在影响OAuth,一个是由授权服务的启动类上的注解@En ...

  2. SpringSecurity身份验证基础入门

    对于没有访问权限的用户需要转到登录表单页面.要实现访问控制的方法多种多样,可以通过Aop.拦截器实现,也可以通过框架实现(如:Apache Shiro.Spring Security). pom.xm ...

  3. SpringBoot2.x版本整合SpringSecurity、Oauth2进行password认证

    很多人在进行项目开发时都会用到Oauth2.0结合SpringSecurity或者Shiro进行权限拦截以及用户验证,网上也有很多的案例,前几天项目里边需要用到,顺便整合了进来,特此写篇博客,记录下过 ...

  4. Ubuntu 18.04及Snap体验——让Linux入门更简单(转))

    https://www.linuxidc.com/Linux/2018-06/152993.htm 初次听说过Linux的时候,是大一计算机课时候老师介绍说除了Windows还有Linux.Unix操 ...

  5. OAuth2.0 入门与进阶

     一.基础知识 1.OAuth产生背景 很多网站.APP 弱化甚至没有搭建自己的账号体系,而是直接使用社会化登录的方式,这样不仅免去了用户注册账号的麻烦.还可以获取用户的好友关系来增强自身的社交功能. ...

  6. Handlebars的基本用法 Handlebars.js使用介绍 http://handlebarsjs.com/ Handlebars.js 模板引擎 javascript/jquery模板引擎——Handlebars初体验 handlebars.js 入门(1) 作为一名前端的你,必须掌握的模板引擎:Handlebars 前端数据模板handlebars与jquery整

    Handlebars的基本用法 使用Handlebars,你可以轻松创建语义化模板,Mustache模板和Handlebars是兼容的,所以你可以将Mustache导入Handlebars以使用 Ha ...

  7. OAuth2 快速入门

    1 OAuth简述 OAuth 2.0 是一个授权协议,它允许软件应用代表(而不是充当)资源拥有者去访问资源拥有者的资源.应用向资源拥有者请求授权,然后取得令牌(token),并用它来访问资源,并且资 ...

  8. 第一篇 UEditor入门部署和体验

    UEditor 是由百度「FEX前端研发团队」开发的所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点,开源基于MIT协议,允许自由使用和修改代码. UEditor富文本编辑器,轻量, ...

  9. Spring Security 实战干货:OAuth2第三方授权初体验

    1. 前言 Spring Security实战干货系列 现在很多项目都有第三方登录或者第三方授权的需求,而最成熟的方案就是OAuth2.0授权协议.Spring Security也整合了OAuth2. ...

随机推荐

  1. Flask自定义转换器,实现路由匹配正则表达式参数

    Flask框架动态路由实现参数传递和Django框架有类似之处,但是相比于Django框架,Flask实现复杂的参数就需要自己自定义转换器来实现了,而不能向Django那样直接使用正则表达式 # 路由 ...

  2. linux系统设置cpu孤立

    介绍 针对cpu密集型的任务,消耗cpu较高,最好设置cpu亲和度,以提高任务执行效率,避免cpu进行上下文切换,浪费不必要的性能. 特定任务(进程/线程)需要独占一个cpu核心并且不想让其他任务(进 ...

  3. xml 解析参考文档

    https://www.cnblogs.com/a1656344531/archive/2012/11/28/2792863.html

  4. springboot 配置mybatis

  5. Leetcode 4.28 string

    1. 38. Count and Say 就是对于前一个数,找出相同元素的个数,把个数和该元素存到新的string里.数量+字符 class Solution { public String coun ...

  6. Codeforces Round #549 (Div. 1)

    今天试图用typora写题解 真开心 参考 你会发现有很多都是参考的..zblzbl Codeforces Round #549 (Div. 1) 最近脑子不行啦 需要cf来缓解一下 A. The B ...

  7. python学习day16 模块(汇总)

    模块(总) 对于range py2,与py3的区别: py2:range() 在内存中立即把所有的值都创建,xrange() 不会再内存中立即创建,而是在循环时边环边创建. py3:range() 不 ...

  8. opencv debug版本在linux下编译,并写了一个DEMO

    用如下方法编译opencv: git clone "https://github.com/opencv/opencv.git" mkdir opencv_debug cd open ...

  9. Python之file

    读写文件 代码: #读写文件str = """i love China!!i hope everyone save"""#打开并书写文件f ...

  10. (N叉树 递归) leetcode 590. N-ary Tree Postorder Traversal

    Given an n-ary tree, return the postorder traversal of its nodes' values. For example, given a 3-ary ...