最近实现了一个多端登录的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 Security的DSL配置风格,不仅仅高大上,而且可以按需配置。如果你没有验证码登录直接删掉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 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |