java oauth2登录以及权限_Spring Cloud集成Security OAuth 2.0权限鉴权验证示例
Spring Cloud集成Security OAuth 2.0权限鉴权验证示例
一、背景说明
目前市场上微服务之间涉及到相互调用的问题,在这个过程中为了验证安全性,需要采用鉴权方式进行管理。目前主流的鉴权方式有Apache Shiro和Spring Security,在这里暂且不讨论Apache Shiro和Spring Security孰优孰劣。本文只讲解Spring Security的集成方式。同时,采用了OAuth 2.0的管理方式,主要基于Token来实现鉴权过程。
Spring Cloud提供了对Spring Security的管理以及OAuth 2.0的集成,方便了我们进行整合使用。
二、项目结构
核心组件:
Api调用管理,主启动类:
依赖的jar包,父工程:
核心工程:
引入spring-security-oauth2-autoconfigure
Spring Security OAuth 2.0验证工具:
Spring Boot与Spring Security的集成
Spring Cloud管理Spring Security工具:
Spring Cloud管理OAuth 2.0:
集成Redis及JDBC:
Spring Social工具包:
JWT工具:
API工程:引入核心工程
Spring Boot启动工具及AOP:
引入Spring Boot缓存工具:
三、配置资源服务和认证服务
资源服务是用来配置用户名密码及手机号验证码等相关的用户认证方式的资源过滤路径,以及静态资源路径和相关请求地址设置认证等功能。
认证服务是用来设置认证使用的方式,Redis/JWT等工具,以及客户端id(clientId)和客户端密钥(clientSecret),只有验证通过的clientId和clientSecret才能获取Token。
我们使用继承AuthorizationServerConfigurerAdapter的SsbAuthorizationServerConfig认证服务类:
设置认证方式:
过滤的静态资源文件:
设置登录页:/form/token地址
设置手机认证及静态资源放开权限:
四、通过用户名密码登录获取Token
我们可以正式使用Spring Security OAuth配置用户名和密码登录,也就是表单登录,Spring Security默认有Form登录和Basic登录,我们已经在SsbResourceServerConfig类的configure方法上通过http.formLogin()设置了表单登录
也就是用户名密码登录。其中Spring Security已经实现了表单登录的封装了,我们只需要设置登录成功之后返回的Token就行。我们创建一个继承SavedRequestAwareAuthenticationSuccessHandler的SsbAuthenticationSuccessHandler实现类:
设置OAuth Token:
加密工具:
这样就可以成功的返回Token给前端,因此我们必须放开/form/token请求地址,我们已经在SsbResourceServerConfig类的configure放开了,已经设置了处理成功的ssbAuthenticationSuccessHandler方法,失败处理的ssbAuthenticationFailureHandler处理过程:
我们接下来创建基于UserDetailsService的ApiUserDetailsService类,本来应该在这个类中查询从数据库中的认证信息,在这里没有从数据库查询,代码如下:
给与了admin、ROLE_USER权限
打开PostMan测试
Authorization选择Basic Auth
填写密钥:
密钥为
中设置的密钥
添加至Header
在Body中添加登录用户名、密码
发送请求,返回:
表示认证成功
五、通过手机验证码登录获取Token
首先配置Redis:
打开Redis:
创建四个使用的类:
(1)基于AbstractAuthenticationToken的SmsCodeAuthenticationToken
(2)基于AbstractAuthenticationProcessingFilter的SmsCodeAuthenticationFilter
(3)基于AuthenticationProvider的SmsCodeAuthenticationProvider
(4)基于SecurityConfigurerAdapter的SmsCodeAuthenticationSecurityConfig
通过在资源管理器里面SsbResourceServerConfig添加
手机验证码接入
SmsCodeAuthenticationToken类的代码如下:
SmsCodeAuthenticationFilter的代码如下:
添加认证逻辑
SmsCodeAuthenticationProvider的代码如下:
SmsCodeAuthenticationSecurityConfig的代码如下:
接下来在PostMan里面
其Authorization:
添加进Header:
其Body里面:
发起请求,控制台:
PostMan里面:
验证成功
六、将Token保存到Redis里面
改造一下SsbAuthorizationServerConfig类,添加Redis保存Token:
将RedisTokenStoreConfig新建一下:
在application.properties添加:
我们测试下:
Redis控制台:
已存储至Redis
七、使用JWT生成Token
改造一下SsbAuthorizationServerConfig
接着创建JwtTokenStoreConfig
并且需要创建一个基于Token Handler,添加Token用户信息:
设置一下application.properties:
测试一下
八、本文总结
本文已经使用了Spring Security封装用户表单登录,我们需要使用手机号验证码登录只需要在此基础上集成编写即可
主要工作在SsbResourceServerConfig里面实现了
完成鉴权验证
java oauth2登录以及权限_Spring Cloud集成Security OAuth 2.0权限鉴权验证示例相关推荐
- 单点登录(shiro与Spring Security OAuth 2.0的集成)
单点登录(shiro与Spring Security OAuth 2.0的集成) shiro项目采用ruoyi,OAuth采用pig 若依:https://gitee.com/y_project/Ru ...
- Spring Security——OAuth 2.0登录——Google,GitHub,Facebook和Okta
基本概念 OAuth 2.0登录:OAuth 2.0登录功能为应用程序提供了使用户能够通过使用其在OAuth 2.0提供程序(例如GitHub)或OpenID Connect 1.0提供程序(例如Go ...
- java oauth2登录以及权限_还得看 Java!Gitee 4月最火 Java 项目大盘点
虽说 C 语言最近重返了 TIOBE 榜单的第一名,但Java 凭借着其强大的群众基础和使用人数,四月份在 的 Gitee 上仍然涌现了许多优秀的开源项目,这些开源项目从框架到应用都有涉及,一起来看看 ...
- springboot oauth2登录成功处理器_Spring Boot Security 整合 OAuth2 设计安全API接口服务...
简介 OAuth是一个关于授权(authorization)的开放网络标准,在全世界得到广泛应用,目前的版本是2.0版.本文重点讲解Spring Boot项目对OAuth2进行的实现,如果你对OAut ...
- sql 账号查询一个表勾选那个权限_Spring Cloud微服务架构中的数据权限DataPermision实现方案...
Spring Cloud微服务架构中的数据权限DataPermision实现方案 一.出现原因 在Spring Cloud的微服务架构中,常见的权限控制除了菜单权限外,还有数据权限DataPermis ...
- Java web登录拦截器_Spring MVC 拦截器实现登录
上篇博文我在博客中讲到如何使用spring MVC框架来实现文件的上传和下载,今天小钱给大家再来分享和介绍Spring MVC框架中相当重要的一块功能--拦截器. 关于拦截器的概念我在这里就不多说了, ...
- java造轮子:快速搭建一个网关服务,动态路由、鉴权看完就会(含流程图)
前言 本文记录一下我是如何使用Gateway搭建网关服务及实现动态路由的,帮助大家学习如何快速搭建一个网关服务,了解路由相关配置,鉴权的流程及业务处理,有兴趣的一定看到最后,非常适合没接触过网关服务的 ...
- java鉴权模块,鉴权代码示例
本文为您介绍URL鉴权的代码示例(Python.Java.Go和PHP),您可以根据业务需要,方便的对URL进行鉴权处理. URL鉴权规则请参见 说明 代码示例中的key参数对应控制台中URL鉴权的主 ...
- DAPP开发中Web3唤醒MetaMask签名数据+Java校验签名实现去中心化和中心化用户数据的鉴权
使用场景大多数用在DAPP中调用中心化数据或者操作某些中心化功能的时候通过DAPP调用MetaMask钱包对数据进行签名传递给后台,后台验证签名数据是否是否当前用户钱包地址签名的数据实现鉴权. 一.D ...
最新文章
- Golang的交叉编译问题
- 最新数据:一图看清全球393家独角兽公司
- 关于阻塞I/O 非阻塞I/O 同步I/O 异步I/O epoll select的学习
- not enough arguments for format string
- 绝对布局优势_前瞻布局+尖端科技+雄厚资金 恒大解锁造车的“正确姿势”
- 程序语言python的优化版_从20秒到0.5秒:一个使用Rust语言来优化Python性能的案例...
- 动态传参, 名称空间, 嵌套, gloabal, nonlocal
- mybatis的缓存技术使用
- 117 Python程序中的线程操作-开启多线程(threading.Thread)
- ASV2011中文版本和英文版本的区别
- 详解KVM虚拟化原理
- 第五章 机械臂的组装及控制
- jquery-seat-charts 使用-自定义座位号 及 重新加载数据
- 【plotly+ datashader+mapbox】Uber纽约上车点可视化/解决超大量地理数据可视化
- 前端 地图增加边框线_基于百度地图开发——在地图上框出市、区的边界线
- 数理统计01:线性相关性系数,斯皮尔曼相关性系数计算及详解
- 6.17 C语言练习(百钱百鸡问题:中国古代数学家张丘建在他的《算经》中提出了著名的“百钱买百鸡问题”:鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何?)
- 小红书笔记下沉怎么做到的?
- string.Format()之格式化数值类型数据
- 分析葡萄酒化学成分及Logistic回归预测葡萄酒口感