前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >甭管什么登录都给你接入到项目中去

甭管什么登录都给你接入到项目中去

作者头像
码农小胖哥
发布2022-10-05 18:40:22
3190
发布2022-10-05 18:40:22
举报

上次我们把验证码登录、小程序登录优雅地集成到了Spring Security,很多同学大呼过瘾,相比较一些传统玩法高级了很多。胖哥就赶紧抓住机会举一反三,把微信、企业微信的三方登录也优雅地接了进来。

只需要通过下面几行简单的代码就可以完成集成:

代码语言:javascript
复制
    @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客户端配置、预设的微信等知名三方配置,你还可以通过DelegateClientRegistrationRepositorysetDelegate方法来扩展获取客户端配置的方式:

代码语言:javascript
复制
    public void setDelegate(Function<String, ClientRegistration> delegate) {
        this.delegate = delegate;
    }

然后在HttpSecurity中你这样配置就完全OK了:

代码语言:javascript
复制
httpSecurity.apply(new OAuth2ProviderConfigurer(delegateClientRegistrationRepository))
                // 微信网页授权  下面的参数是假的
            .wechatWebclient("wxdf90xxx8e7f", "bf1306baaaxxxxx15eb02d68df5")
                // 企业微信登录 下面的参数是假的
            .workWechatWebLoginclient("wwa70dc5b6e56936e1",
                                      "nvzGI4Alp3xxxxxxZUc3TtPtKbnfTEets5W8", "1000005")
                // 微信扫码登录 下面的参数是假的
            .wechatWebLoginclient("xxxxxxxx", "xxxxxxxx")
         .oAuth2LoginConfigurerConsumer(oauth2Configurer-> 
           oauth2Configurer.successHandler(new ForwardAuthenticationSuccessHandler("/"))
          );

把帐号配置进去就完事了,简单不简单,而且扩展性依然有保障,完全能够满足你的个性化需求。如果你想数据库管理这些参数,你可以自行扩展一下,也不难。

登录的效果成这样:

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

登录成功后的逻辑,你可以写一个/接口:

代码语言:javascript
复制
    @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哦!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-06-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码农小胖哥 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
验证码
腾讯云新一代行为验证码(Captcha),基于十道安全栅栏, 为网页、App、小程序开发者打造立体、全面的人机验证。最大程度保护注册登录、活动秒杀、点赞发帖、数据保护等各大场景下业务安全的同时,提供更精细化的用户体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档