spring security自定义登录接口,spring security实现登录认证

  spring security自定义登录接口,spring security实现登录认证

  为什么

目录

DSL配置风格如此灵活?方法使用普通登录验证码登录一个小程序最近实现了一个多终端登录的Spring安全组件,使用起来非常流畅,开箱即用,可插拔,灵活。我觉得可以满足大部分场景的需求。目前完成了手机号验证码和微信小程序两种自定义登录,加上默认的表单登录。现在,开源分享给大家。接下来简单介绍一下这个插件包。

 

  00-1010开门见山。我们先来看看配置:

  @ Bean SecurityFilterChain defaultSecurityFilterChain(http security http)抛出异常{ http.csrf()。禁用()。authorizeRequests()。mvcMatchers(/O/* * )。access( has authority( role _ user ))。Anyrequest()。已验证()。和()//默认表单登录。formLogin()。和()。apply(new loginfiltersecurityconfigurer())//登录到。captchalogin(captchaloginconfigurer-//验证码1这里配置了最高优先级。注册为Spring Bean可以免除captchaloginfigurer.captcha服务(this :3360 verifycaptchock)//根据手机号查询用户UserDetials 1。这里的配置优先级是最高的。2注册为Spring Bean可以免除配置。CaptChauserDetailService(this :3360 loaduserbyphonemock)//生成的JWT返回1。这里的配置优先级是最高的。2注册为Spring Bean可以避免配置。JWTTokenGenerator(this :3360 tokenresponsemock)//Todo其他配置省略…)//Applet登录支持多个Applet同时登录。miniapplogin(miniapploginfogurer-miniapploginfogurer//实现小程序的多租户//根据请求携带的clientid查询小程序的appid和secret 1,这里的配置优先级最高。2注册为Spring Bean可以免除。miniappclientservice(this :3360 miniappclientmock)//自动注册和检索小程序用户1。这里的配置优先级是最高的。2注册为Spring Bean可以免配置。miniappuserdetailsservice(new miniappuserdetailsservice mock())//小程序sessionkey缓存的过期时间应该小于微信官方文档的声明。1.这里的配置优先级是最高的。2.注册为Spring Bean可以避免配置。miniappsessionkey cache(new miniappsessionkey cache())//生成的JWT返回1。这里的配置优先级是最高的。2注册为Spring Bean可以避免配置。

   .jwtTokenGenerator(this::tokenResponseMock) //todo 其它配置省略…… ); return http.build(); }这种风格完全贴合了Spring Security的DSL配置风格,不仅仅高大上,而且可以按需配置。如果你没有验证码登录直接删掉captchaLogin方法;如果你没有微信小程序登录直接删掉miniAppLogin方法。甚至还可以对单种登录进行细粒度定制化,formLogin有的功能基本验证码登录和微信小程序登录的都有。

  

 

  

为什么这么灵活?

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

 

  

 public abstract class AbstractLoginFilterConfigurer<H extends HttpSecurityBuilder<H>, C extends AbstractLoginFilterConfigurer<H, C, F>, F extends AbstractAuthenticationProcessingFilter> extends AbstractHttpConfigurer<AbstractLoginFilterConfigurer<H, C, F>, H> { // 省略…… }

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

 

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

  

 @Override protected AuthenticationSuccessHandler defaultSuccessHandler(H http) { // 如果配置类没有配置 就尝试去Spring IoC中发现 if (this.jwtTokenGenerator == null) { ApplicationContext applicationContext = http.getSharedObject(ApplicationContext.class); jwtTokenGenerator = getBeanOrNull(applicationContext, JwtTokenGenerator.class); } Assert.notNull(jwtTokenGenerator, "jwtTokenGenerator is required"); return new LoginAuthenticationSuccessHandler(jwtTokenGenerator); } public final <T> T getBeanOrNull(ApplicationContext applicationContext, Class<T> beanType) { String[] beanNames = applicationContext.getBeanNamesForType(beanType); if (beanNames.length == 1) { return applicationContext.getBean(beanNames[0], beanType); } return null; }

 

  

使用方法

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

 

  

 <dependency> <groupId>cn.felord</groupId> <artifactId>spring-security-extension</artifactId> <version>1.0.0</version> </dependency>

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

 

  

 

  

普通登录

原生Spring Security接口

 

  

POST /login?username=user&password=12345 HTTP/1.1Host: localhost:8080

 

  

验证码登录

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

 

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

  

POST /login/captcha?phone=11111111111&captcha=123123 HTTP/1.1Host: localhost:8080

 

  

小程序登录

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

 

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

  

POST /miniapp/preauth?clientId=wxxda23234&jsCode=051A23234ZHa1tZ5yj3AOlFr HTTP/1.1Host: localhost:8080

响应:

 

  

{ "code": 200, "data": { "errcode": null, "errmsg": null, "sessionKey": null, "openid": "oWmZj5QBrZxxxxx8OUxRrZJi4", "unionid": "oS-dxxxxxx4w_x7dA-h9MIuA" }, "msg": "", "identifier": true}

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

 

  

POST /login/miniapp HTTP/1.1Host: localhost:8080Content-Type: application/json{ "clientId": "wxd14qr6", "openId": "oWmZj5QBrZIBks0xx8OUxRrZJi4", "unionId": "oS-dK520tgW8xxxx7dA-h9MIuA", "iv":"LQUOt8BSTa7xxxpe1Q==", "encryptedData": "10hn3o4xxxxxrO/Ag5nRD3QkLSzduKnWuzN9B/H4Y0G5mDPR8siA7T8yaaqZsrMycLAoe2qrd1J75yYetYuWifiq3jUrcceRZHVxxl9LnQdW8f5+pMTnQtCYiMJ7Jm9paCw2Bh+5Lowkyqkx1q0fALvCQ9LXPPLAbLOB9CavRfKoenAmyyHQjZ/6lz0njzA=="}

获取方式

 

  Gitee: felord/spring-security-login-extension

  到此这篇关于Spring Security 一键接入验证码登录和小程序登录的文章就介绍到这了,更多相关Spring Security 一键接入登录内容请搜索盛行IT以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: