这个Spring Security登录插件牛啊,验证码、小程序、OAuth2都能快速接入
上次我们把验证码登录、小程序登录优雅地集成到了Spring Security,很多同学大呼过瘾,相比较一些传统玩法高级了很多。胖哥就赶紧抓住机会举一反三,把几个非标准的OAuth2也接入了进来,主要是微信、企业微信,做到应接尽接。
只需要通过下面几行简单的代码就可以完成集成:
@Bean
DelegateClientRegistrationRepository delegateClientRegistrationRepository(@Autowired(required = false) OAuth2ClientProperties properties) {
DelegateClientRegistrationRepository clientRegistrationRepository = new DelegateClientRegistrationRepository();
if (properties != null) {
List<ClientRegistration> registrations = new ArrayList<>(
OAuth2ClientPropertiesRegistrationAdapter.getClientRegistrations(properties).values());
registrations.forEach(clientRegistrationRepository::addClientRegistration);
}
return clientRegistrationRepository;
}
这个是为了兼容在application.yaml配置文件的OAuth2客户端配置、预设的微信等知名三方配置,你还可以通过DelegateClientRegistrationRepository的setDelegate方法来扩展获取客户端配置的方式:
public void setDelegate(Function<String, ClientRegistration> delegate) {
this.delegate = delegate;
}
然后在HttpSecurity中你这样配置就完全OK了:
httpSecurity.apply(new OAuth2ProviderConfigurer(delegateClientRegistrationRepository))
// 微信网页授权 下面的参数是假的
.wechatWebclient("wxdf90xxx8e7f", "bf1306baaaxxxxx15eb02d68df5")
// 企业微信登录 下面的参数是假的
.workWechatWebLoginclient("wwa70dc5b6e56936e1",
"nvzGI4Alp3xxxxxxZUc3TtPtKbnfTEets5W8", "1000005")
// 微信扫码登录 下面的参数是假的
.wechatWebLoginclient("xxxxxxxx", "xxxxxxxx")
.oAuth2LoginConfigurerConsumer(oauth2Configurer->
oauth2Configurer.successHandler(new ForwardAuthenticationSuccessHandler("/"))
);
把帐号配置进去就完事了,简单不简单,而且扩展性依然有保障,完全能够满足你的个性化需求。如果你想数据库管理这些参数,你可以自行扩展一下,也不难。
登录的效果成这样:

稍微一改成自定义页面,是不是高大上起来了呢?

登录成功后的逻辑,你可以写一个/接口:
@GetMapping("/")
public Map<String, Object> index(@RegisteredOAuth2AuthorizedClient
OAuth2AuthorizedClient oAuth2AuthorizedClient) {
Authentication authentication = SecurityContextHolder.getContext()
.getAuthentication();
Map<String, Object> map = new HashMap<>(2);
// OAuth2AuthorizedClient 为敏感信息不应该返回前端
map.put("oAuth2AuthorizedClient", oAuth2AuthorizedClient);
map.put("authentication", authentication);
// todo 处理登录注册的逻辑 处理权限问题
// todo 根据 authentication 生成 token cookie之类的
// todo 也可以用 AuthenticationSuccessHandler 配置来替代
return map;
}
根据Authentication信息返回token也好、cookie也好,都能实现。你也可以不写接口,配置一个AuthenticationSuccessHandler。
如果你有其它第三方OAuth2要对接,可以提供给胖哥配置,胖哥帮你免费搞定。
项目和DEMO地址是:https://gitee.com/felord/spring-security-login-extension 记得给个star哦!
关注公众号:Felordcn 获取更多资讯
这个Spring Security登录插件牛啊,验证码、小程序、OAuth2都能快速接入的更多相关文章
- 三:Spring Security 登录添加验证码
Spring Security 登录添加验证码 1.准备验证码 2.自定义过滤器 3.配置 1.准备验证码 要有验证码,首先得先准备好验证码,本文采用 Java 自画的验证码,代码如下: /** * ...
- Spring Security 登录校验 源码解析
传统情况下,在过滤器中做权限验证,Spring Secuirty也是在Filter中进行权限验证. 创建并注册过滤器 package com.awizdata.edubank.config; impo ...
- 四:Spring Security 登录使用 JSON 格式数据
Spring Security 登录使用 JSON 格式数据 1.基本登录方案 1.1 创建 Spring Boot 工程 1.2 添加 Security 配置 2.使用JSON登录 江南一点雨-Sp ...
- Spring Boot中的微信支付(小程序)
前言 微信支付是企业级项目中经常使用到的功能,作为后端开发人员,完整地掌握该技术是十分有必要的. logo 一.申请流程和步骤 图1-1 注册微信支付账号 获取微信小程序APPID 获取微信商家的商户 ...
- spring security 登录、权限管理配置
登录流程 1)容器启动(MySecurityMetadataSource:loadResourceDefine加载系统资源与权限列表) 2)用户发出请求 3)过滤器拦截(MySecurityFil ...
- Spring Security登录验证流程源码解析
一.登录认证基于过滤器链 Spring Security的登录验证流程核心就是过滤器链.当一个请求到达时按照过滤器链的顺序依次进行处理,通过所有过滤器链的验证,就可以访问API接口了. SpringS ...
- 页面获取Spring Security登录用户
1.在session中取得spring security的登录用户名如下:${session.SPRING_SECURITY_CONTEXT.authentication.principal.user ...
- 转:Spring学习笔记---Spring Security登录页
转:http://axuebin.com/blog/2016/06/21/spring-security/?utm_source=tuicool&utm_medium=referral. 提示 ...
- 解决:spring security 登录页停留时间过长 跳转至 403页面
前言:最近的项目中用到了spring security组件,说句显low的话:我刚开始都不知道用了security好不勒,提了bug,在改的过程中,遇到了一些问题,找同事交流,才知道是用的securi ...
随机推荐
- Java报错:Injection of resource dependencies failed
在学习springMVC+Mabatis的时候,添加注解@Resource报错 Injection of resource dependencies failed de完bug后发现有几个点注意一下, ...
- 安装 UE 源码版
# 安装 UE 源码版 ## 下载安装包 > - 先去 Github 找 UE 官方开源的引擎组(这个需要申请加入) > - 加入后找到开源的源码版项目下载 zip 到本地 > - ...
- windows上用命令行我们查看机器cpu信息(使用计算器-程序员模式-四字时,查看系统类型)
查看系统是64位还是32位 C:\Users\qingshuic>wmic os get osarchitecture OSArchitecture 64-bitC:\Users\qingshu ...
- mysql_install_db 一次修复密码
我用mysql 社区版进行的安装,在linux centos 操作系统下, yum install 方式系统默认安装时没有密码的,需要你及时设置,但是我操作多次后,并没有修改密码,启动和关闭多次以后就 ...
- 第十三届蓝桥杯省赛C/C++ B组
@(第十三届蓝桥杯省赛C/C++B组) A顺子日期 答案是1478 B顺子日期 答案14(如果012算的话) C刷题统计 数据范围1e18,所以不能直接暴力,先取余,再暴力剩下的 #include&l ...
- Sql语言学习——DDl
DDL:操作数据库.表 1. 操作数据库:CRUD 1. C(Create):创建 * 创建数据库: * create database 数据库名称; * 创建数据库,判断不存在,再创建: * cre ...
- python基础练习题(题目 递归求阶乘)
day18 --------------------------------------------------------------- 实例026:利用递归方法求5! 分析:递归包括递归体和递归条 ...
- XCTF练习题---CRYPTO---告诉你个秘密
XCTF练习题---CRYPTO---告诉你个秘密 flag:TONGYUAN 步骤解读: 1.观察题目,下载附件 2.打开附件,内容好像有点像十六进制,先进行一下十六进制转换,得到一串字符 网址:h ...
- XCTF练习题---MISC---give_you_flag
XCTF练习题---MISC---give_you_flag flag:flag{e7d478cf6b915f50ab1277f78502a2c5} 解题步骤: 1.观察题目,下载附件 2.打开发现是 ...
- [操作系统]LINUX进程状态说明
R(task_running) : 可执行状态 只有在该状态的进程才可能在CPU上运行.而同一时刻可能有多个进程 处于可执行状态,这些进程的task_struct结构(进程控制块)被放入对应CPU的 ...