这个Spring Security登录插件牛啊,验证码、小程序、OAuth2都能快速接入
2023-03-31 11:05:46 时间
上次我们把验证码登录、小程序登录优雅地集成到了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 获取更多资讯
相关文章
- 你们所关心的七大区块链问题,专家有话说!
- 三问区块链:区块链到底是技术创新还是集资创新
- 区块链大规模应用,技术上必须回答的问题
- 关于区块链的6个其它应用
- 院士梅宏:真正的大数据应用体现在数据挖掘的深度
- Zookeeper的web管理应用
- Android安全开发之通用签名风险
- 安卓应用乾坤大挪移,Ubuntu上的搬运工:ARChon
- 微信双开是定时炸弹?关于非越狱iOS上微信分身高危插件ImgNaix的分析
- 浅谈Android应用保护(零):出发点和背景
- 你的应用是如何被替换的,App劫持病毒剖析
- IPAPatch: 免越狱调试、修改第三方App
- 线程亲和性(Thread Affinity)
- Android代码入侵原理解析(一)
- 利用FRIDA攻击Android应用程序(三)
- Android代码混淆技术总结(一)
- Google IO 2017为我们带来了什么
- 《OSGi官方文档》使用OSGi的好处
- Mozilla推出首款为开发者打造的浏览器——火狐开发者专版
- 谷歌称在发布“安卓O”新版本前不会修复屏幕劫持漏洞