Spring Boot 2应用程序和OAuth 2 –传统方法

这篇文章是3个系列文章中的第二部分,探讨了如何为基于Spring Boot 2的应用程序启用OSO2提供程序SSO。 3个帖子是:

1. 引导兼容OpenID Connect的OAuth2授权服务器/ OpenID提供程序的方法

2.与OAuth2授权服务器/ OpenID提供程序集成的旧版Spring Boot / Spring 5方法–这篇文章

3.与OAuth2授权服务器/ OpenID Connect提供商集成的更新的Spring Boot 2 / Spring 5方法–即将推出

这篇文章将探讨传统的Spring Boot 2 / Spring Security 5方法,以为应用程序启用基于OAuth2的身份验证机制,本文假设所有
遵循了上一篇博客文章中的步骤, UAA已启动并正在运行。

可能想到的一个问题是,为什么我应该在Spring Boot 2 / Spring Security 5的背景下谈论遗留物,而这本来应该是做SSO的新方法! 原因是,随着开发人员我们一直在使用Spring Boot 1.5.x的一种方法(现在认为该方法已被弃用),但是其中的功能尚未完全移植到新方法上(能够启动OAuth2授权服务器以及创建OAuth2资源服务器的能力是示例),在此期间,Spring Security开发人员(感谢
Rob Winch和Joe Grandja )通过spring-security-oauth2-boot项目的形式为传统方法提供了桥梁。

方法

因此,旧方法的外观是什么–在此之前,我已经详细介绍了它,以总结一下它在一个名为@ EnableOAuth2SSO的注释和一组支持该注释的属性的基础上的工作原理,示例安全配置如下所示–

import org.springframework.boot.autoconfigure.security.oauth2.client.EnableOAuth2Sso;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.builders.WebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;@EnableOAuth2Sso
@Configuration
public class OAuth2SecurityConfig extends WebSecurityConfigurerAdapter {@Overridepublic void configure(WebSecurity web) throws Exception {super.configure(web);web.ignoring().mvcMatchers("/favicon.ico", "/webjars/**", "/css/**");}@Overrideprotected void configure(HttpSecurity http) throws Exception {http.csrf().disable();http.authorizeRequests().antMatchers("/secured/**").authenticated().antMatchers("/").permitAll().anyRequest().authenticated();}}

指向UAA的一组支持属性如下:

ssoServiceUrl: http://localhost:8080/uaasecurity:oauth2:client:client-id: client1client-secret: client1access-token-uri: ${ssoServiceUrl}/oauth/tokenuser-authorization-uri: ${ssoServiceUrl}/oauth/authorizeresource:jwt:key-uri: ${ssoServiceUrl}/token_keyuser-info-uri: ${ssoServiceUrl}/userinfo

将spring-security-oauth2-boot项目作为依赖项插入:

compile 'org.springframework.cloud:spring-cloud-starter-oauth2'
compile("org.springframework.security.oauth.boot:spring-security-oauth2-autoconfigure:2.0.0.BUILD-SNAPSHOT")

这些注释也适用于Spring Boo2应用程序。 但是请注意,Spring Boot 2支持两个不同的Web框架-Spring Web和Spring Webflux ,此方法可过渡地 引入 Spring Web ,这将Spring Web强制为默认框架

完整示例及其启动方法可在我的github存储库中找到 – https://github.com/bijukunjummen/oauth2-boot2

测试中

任何以“ / secured / **”开头的uri均已启用SSO,如果访问索引页,则无需任何身份验证即可显示它:

现在,单击以“ / secured / **”开头的uri应该会触发OAuth2 授权代码流 :

并应通过UAA向用户显示登录屏幕:

使用之前创建的凭证登录– user1 / user1应该将用户重定向回该应用程序的Spring Boot 2旧版,并显示受保护的页面:

这就完成了使用Spring Boot 2进行SSO的遗留方法。请注意,这只是伪身份验证,OAuth2的用途更多是为了授权访问用户资源,而不是在这里使用身份验证。 可以在此处找到澄清这一点的文章。 下一篇有关本机Spring Security 5 / Spring Boot2的文章将提供使用OpenID Connect的更清晰的身份验证机制。

翻译自: https://www.javacodegeeks.com/2018/02/spring-boot-2-applications-oauth-2-legacy-approach.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/347654.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java多线程(2)--Thread类继承和Runnable接口创建线程

Java语言的JVM允许程序运行多个线程,它通过java.lang.Thread类来体现。 Thread类的特性 每个线程都是通过某个特定Thread对象的run()方法来完成操作的,经常把run()方法的主体称为线程体,通过该Thread对象的start()方法来启动这个线程&#x…

matlab在电磁场与电磁波中的应用,matlab在电磁场与电磁波学习中的应用.docx

matlab在电磁场与电磁波学习中的应用.docx MATLAB在电磁场与电磁波学习中的应用裴逸菲(燕京理工学院信息科学与技术学院,河北廊坊065201)摘要针对电磁场与电磁波在大学课程中的理论性强、概念抽象的特点,在学习中引入MATLAB软件,利用MATLAB的…

Java多线程(3)--线程的生命周期

JDK中用Thread.State类定义了线程的五种状态 要想实现多线程,必须在主线程中创建新的线程对象。Java语言使用Thread类及其子类的对象来表示线程,在它的一个完整的生命周期中通常要经历如下的五种状态: ①新建: 当一个Thread类或…

m序列自相关matlab代码,m序列的输出及其自相关序列

【例10-2】 设m序列的生成多项式为g(x)1x^3x^4,求:(1)m序列的输出及其自相关序列;(2)脉冲波形成为矩形脉冲p(t){1 0≤t≤Tc 画出m序列信号的自相关函数;{0 其它 ,(3)设脉冲波形为升余弦函数(滚降系数a0),画…

JDK 10:从Java访问Java应用程序的进程ID

StackOverflow.com上一个普遍的问题是:“ Java程序如何获得自己的进程ID? 与该问题相关的几个答案包括解析ManagementFactory返回的String 。 getRuntimeMXBean() 。 getName() [但是可以提供“任意字符串”…

Java多线程(4)--线程的同步解决线程安全问题

多线程出现安全问题 问题的原因: 当多条语句在操作同一个线程共享数据时,一个线程对多条语句只执行了一部分,还没有执行完,另一个线程参与进来执行,导致共享数据的错误。 解决办法: 对多条操作共享数据的…

java中套接字,如何在java中获得一个开放的套接字?

在Java中,我如何获得一个开放的套接字?我有2个JFrame;在第一个JFrame中,我打开了Client socket的连接.在同一个JFrame中,我创建了另一个JFrame(JFrame2)的实例.现在我想从JFrame1获取相同的Socket到JFrame2继续与我的服务器Socket交谈:login.java(First …

Java多线程(5)--线程通信wait和notify

例题:使用两个线程打印 1-100。线程1, 线程2 交替打印。 解决:涉及wait()和notify()/notifyAll() class Communicate implements Runnable {private int number 1;Overridepublic void run() {while (true) {synchronized (this) {this.notify();if (…

matlab eig 复杂度,MATLAB中的eig函数

在MATLAB中,计算矩阵A的特征值和特征向量的函数是eig(A),常用的调用格式有5种:Eeig(A):求矩阵A的全部特征值,构成向量E。[V,D]eig(A):求矩阵A的全部特征值,构成对角阵D,并求A的特征向…

spring常见面试问题_Spring面试问题

spring常见面试问题另外,请查看我们最新的文章69Spring面试问题与解答–最终清单 。 1)什么是春天? 回答: Spring是控件和面向方面的容器框架的轻量级反转。 2)解释春天? 回答: 轻巧&#x…

Java多线程(6)--Callable接口创建线程

与使用Runnable相比, Callable功能更强大些 ①相比run()方法,可以有返回值 ②方法可以抛出异常 ③支持泛型的返回值 ④需要借助FutureTask类,可以获取返回结果 Future接口 ①可以对具体Runnable、Callable任务的执行结果进行取消、查询是否完…

matlab谱系聚类图,如何看懂SPSS聚类分析的树状图/谱系图?

原创: 数据小兵 SPSS统计训练营SPSS聚类分析提供两种类别图形的输出,第一种是软件默认的“冰柱图”,形状类似于冬天屋檐上垂下的冰柱,因此得名。第二种是“树状图”,在新版本软件中也称谱系图,像一个横着生…

Java多线程(7)--线程池创建线程

经常创建和销毁、使用量特别大的资源,比如并发情况下的线程,对性能影响很大。 提前创建好多个线程,放入线程池中,使用时直接获取,使用完放回池中,可以避免频繁创建销毁、实现重复利用。 使用线程池好处&a…

在Google Cloud Platform的K8上运行Fn函数

最近,我在Functions和Project Fn中玩了很多游戏。 最终,我不得不离开笔记本电脑上的操场,进入真正的野生世界。 在K8s集群上运行Fn的想法对我来说很有吸引力,因此我决定在Prem或云中的某个地方进行操作。 在对如何在裸机上自行安装…

php判断对象属于哪个类,PHP instanceof:判断对象是否属于某个类

使用 PHP 中的 instanceof 运算符,可以判断一个对象是否属于某一个类,语法格式如下:对象名 instanceof 类名;【示例】使用 instanceof 判断一个对象是否属于某个类。class A{}class B{}$obj new A;var_dump($obj instanceof A);echo ;var_du…

Java常用类(1)--字符串相关类String、StringBuffer、StringBuilder全面知识

文章目录String类StringBuffer类StringBuilder类String:不可变的字符序列;底层使用char[]存储 StringBuffer:可变的字符序列;线程安全的,效率低;底层使用char[]存储 StringBuilder:可变的字符序…

hybbs接口php,HYBBS

#HYBBS官方地址: http://bbs.hyyyp.com论坛基于HYPHP框架开发MVC结构支持HOOK机制PDO操作SQL,支持众多数据库论坛特性服务器环境要求:支持子目录安装论坛PHP 5.3 包括5.3 , 5.3以上环境Apache || Nginx || IIS需要开启伪静态,否则无法安装~!数据库支持 : MYSQL , MSSQL ,Oracle…

Java常用类(2)--日期时间相关类Date、Calendar、LocalDateTime、Instant全面

文章目录java.lang.System类java.util.Date类java.sql.Date类java.text.SimpleDateFormat类java.util.Calendar(日历)类java.time类java.time.Instant类java.time.format.DateTimeFormatter 类其它APIjava.lang.System类 System类提供的public static long currentTimeMillis(…

apache camel_Apache Camel简介

apache camelApache Camel是著名的企业集成模式的开源实现。 Camel是一个路由和中介引擎,可帮助开发人员以各种特定于域的语言(DSL)(例如Java,Spring / XML,scala等)创建路由和中介规则。 骆驼…

oracle括号不区分中英,Oracle的sql语句,查询条件加括号与不加括号区别 -

例如:SELECT ename, job, deptnoFROM empWHERE deptno in (10, 20)AND (ename like ‘%I‘ OR job like ‘%ER‘);执行该sql,结果集如下:1 JONES MANAGER 202 CLARK MANAGER 10去掉上面sql查询条件中的括号&a…