小程序开发|小程序制作|小程序开发网

搜索

Spring Security 一键接入验证码登录和小程序登录

2023-7-7 12:38| 发布者: FY么事| 查看: 281| 评论: 0

摘要: 最近实现了一个多端登录的Spring Security组件,用起来非常丝滑,开箱即用,可插拔,而且灵活性非常强。我觉得能满足大部分场景的需要。目前完成了手机号验证码和微信小程序两种自定义登录,加上默认的Form登录,一

最近实现了一个多端登录的Spring Security组件,用起来非常丝滑,开箱即用,可插拔,而且灵活性非常强。我觉得能满足大部分场景的需要。目前完成了手机号验证码和微信小程序两种自定义登录,加上默认的Form登录,一共三种,现在开源分享给大家,接下来简单介绍一下这个插件包。

DSL配置风格

切入正题,先来看看配置:

())                // 验证码登录                .captchaLogin(captchaLoginConfigurer ->                                // 验证码校验 1 在此处配置 优先级最高 2 注册为Spring Bean 可以免配置                                captchaLoginConfigurer.captchaService(this::verifyCaptchaMock)                                        // 根据手机号查询用户UserDetials  1 在此处配置 优先级最高 2 注册为Spring Bean 可以免配置                                        .captchaUserDetailsService(this::loadUserByPhoneMock)                                        // 生成JWT 返回  1 在此处配置 优先级最高 2 注册为Spring Bean 可以免配置                                        .jwtTokenGenerator(this::tokenResponseMock)                        //todo 其它配置省略……                )                // 小程序登录 同时支持多个小程序                .miniAppLogin(miniAppLoginConfigurer -> miniAppLoginConfigurer                                // 实现小程序多租户                                // 根据请求携带的clientid 查询小程序的appid和secret 1 在此处配置 优先级最高 2 注册为Spring Bean 可以免配置                                .miniAppClientService(this::miniAppClientMock)                                // 小程序用户 自动注册和检索  1 在此处配置 优先级最高 2 注册为Spring Bean 可以免配置                                .miniAppUserDetailsService(new MiniAppUserDetailsServiceMock())                                // 小程序sessionkey缓存 过期时间应该小于微信官方文档的声明   1 在此处配置 优先级最高 2 注册为Spring Bean 可以免配置                                .miniAppSessionKeyCache(new MiniAppSessionKeyCacheMock())                                // 生成JWT 返回  1 在此处配置 优先级最高 2 注册为Spring Bean 可以免配置                                .jwtTokenGenerator(this::tokenResponseMock)                        //todo 其它配置省略……                );        return http.build();    }

这种风格完全贴合了Spring SecurityDSL配置风格,不仅仅高大上,而且可以按需配置。如果你没有验证码登录直接删掉captchaLogin方法;如果你没有微信小程序登录直接删掉miniAppLogin方法。甚至还可以对单种登录进行细粒度定制化,formLogin有的功能基本验证码登录和微信小程序登录的都有。

为什么这么灵活?

这里抽象了一个登录配置类:

,          C extends AbstractLoginFilterConfigurer,          F extends AbstractAuthenticationProcessingFilter>         extends AbstractHttpConfigurer, H> {             // 省略……         }

所有额外的登录渠道大都可以通过这个类来扩展,负责验证码登录的CaptchaLoginFilterConfigurer和微信小程序登录的MiniAppLoginFilterConfigurer都是该类实现的,基本上你看了源码也能照葫芦画瓢来一个。

另外上面这些配置项接口,都可以放在Spring IoC中,配置类能自动获取,不过优先级最高的还是通过上面代码中配置的具体实现,原理参见下面的的样例:

 T getBeanOrNull(ApplicationContext applicationContext, Class beanType) {         String[] beanNames = applicationContext.getBeanNamesForType(beanType);         if (beanNames.length == 1) {             return applicationContext.getBean(beanNames[0], beanType);         }         return null;     }

使用方法

自行使用Maven命令mvn install到本地仓库,然后引入:

            cn.felord            spring-security-extension            1.0.0        

然后参考样例sample项目进行开发,登录方式有三种。

普通登录

原生Spring Security接口

验证码登录

需要先实现必须的配置接口

发送验证码后调用验证码登录接口:

小程序登录

需要先实现必须的配置接口

前端先调用微信授权登录接口获取openid:

响应:

然后调用小程序登录接口:

获取方式

Gitee: felord/spring-security-login-extension

关注公众号:码农小胖哥,获取更多资讯

个人博客:https://felord.cn


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

鲜花

握手

雷人

路过

鸡蛋

最新评论

返回顶部