最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring Security組件一鍵接入驗(yàn)證碼登錄和小程序登錄的詳細(xì)過程

 更新時(shí)間:2022年04月03日 12:20:58   作者:碼農(nóng)小胖哥  
這篇文章主要介紹了Spring Security 一鍵接入驗(yàn)證碼登錄和小程序登錄,簡單介紹一下這個(gè)插件包的相關(guān)知識(shí),本文結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧

最近實(shí)現(xiàn)了一個(gè)多端登錄的Spring Security組件,用起來非常絲滑,開箱即用,可插拔,而且靈活性非常強(qiáng)。我覺得能滿足大部分場景的需要。目前完成了手機(jī)號(hào)驗(yàn)證碼和微信小程序兩種自定義登錄,加上默認(rèn)的Form登錄,一共三種,現(xiàn)在開源分享給大家,接下來簡單介紹一下這個(gè)插件包。

DSL配置風(fēng)格

切入正題,先來看看配置:

 @Bean
    SecurityFilterChain defaultSecurityFilterChain(HttpSecurity http) throws Exception {
        http.csrf().disable()
                .authorizeRequests()
                .mvcMatchers("/foo/**")
                .access("hasAuthority('ROLE_USER')").anyRequest().authenticated()
                .and()
                // 默認(rèn)form表單登錄
                .formLogin()
                .and()
                .apply(new LoginFilterSecurityConfigurer<>())
                // 驗(yàn)證碼登錄
                .captchaLogin(captchaLoginConfigurer ->
                                // 驗(yàn)證碼校驗(yàn) 1 在此處配置 優(yōu)先級(jí)最高 2 注冊(cè)為Spring Bean 可以免配置
                                captchaLoginConfigurer.captchaService(this::verifyCaptchaMock)
                                        // 根據(jù)手機(jī)號(hào)查詢用戶UserDetials  1 在此處配置 優(yōu)先級(jí)最高 2 注冊(cè)為Spring Bean 可以免配置
                                        .captchaUserDetailsService(this::loadUserByPhoneMock)
                                        // 生成JWT 返回  1 在此處配置 優(yōu)先級(jí)最高 2 注冊(cè)為Spring Bean 可以免配置
                                        .jwtTokenGenerator(this::tokenResponseMock)
                        //todo 其它配置省略……
                )
                // 小程序登錄 同時(shí)支持多個(gè)小程序
                .miniAppLogin(miniAppLoginConfigurer -> miniAppLoginConfigurer
                                // 實(shí)現(xiàn)小程序多租戶
                                // 根據(jù)請(qǐng)求攜帶的clientid 查詢小程序的appid和secret 1 在此處配置 優(yōu)先級(jí)最高 2 注冊(cè)為Spring Bean 可以免配置
                                .miniAppClientService(this::miniAppClientMock)
                                // 小程序用戶 自動(dòng)注冊(cè)和檢索  1 在此處配置 優(yōu)先級(jí)最高 2 注冊(cè)為Spring Bean 可以免配置
                                .miniAppUserDetailsService(new MiniAppUserDetailsServiceMock())
                                // 小程序sessionkey緩存 過期時(shí)間應(yīng)該小于微信官方文檔的聲明   1 在此處配置 優(yōu)先級(jí)最高 2 注冊(cè)為Spring Bean 可以免配置
                                .miniAppSessionKeyCache(new MiniAppSessionKeyCacheMock())
                                // 生成JWT 返回  1 在此處配置 優(yōu)先級(jí)最高 2 注冊(cè)為Spring Bean 可以免配置
                                .jwtTokenGenerator(this::tokenResponseMock)
                        //todo 其它配置省略……
                );

        return http.build();
    }

這種風(fēng)格完全貼合了Spring Security的DSL配置風(fēng)格,不僅僅高大上,而且可以按需配置。如果你沒有驗(yàn)證碼登錄直接刪掉captchaLogin方法;如果你沒有微信小程序登錄直接刪掉miniAppLogin方法。甚至還可以對(duì)單種登錄進(jìn)行細(xì)粒度定制化,formLogin有的功能基本驗(yàn)證碼登錄和微信小程序登錄的都有。

為什么這么靈活?

這里抽象了一個(gè)登錄配置類:

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

所有額外的登錄渠道大都可以通過這個(gè)類來擴(kuò)展,負(fù)責(zé)驗(yàn)證碼登錄的CaptchaLoginFilterConfigurer和微信小程序登錄的MiniAppLoginFilterConfigurer都是該類實(shí)現(xiàn)的,基本上你看了源碼也能照葫蘆畫瓢來一個(gè)。

另外上面這些配置項(xiàng)接口,都可以放在Spring IoC中,配置類能自動(dòng)獲取,不過優(yōu)先級(jí)最高的還是通過上面代碼中配置的具體實(shí)現(xiàn),原理參見下面的的樣例:

 @Override
     protected AuthenticationSuccessHandler defaultSuccessHandler(H http) {
         // 如果配置類沒有配置 就嘗試去Spring IoC中發(fā)現(xiàn)
         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項(xiàng)目進(jìn)行開發(fā),登錄方式有三種。

普通登錄

原生Spring Security接口

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

驗(yàn)證碼登錄

需要先實(shí)現(xiàn)必須的配置接口

發(fā)送驗(yàn)證碼后調(diào)用驗(yàn)證碼登錄接口:

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

小程序登錄

需要先實(shí)現(xiàn)必須的配置接口

前端先調(diào)用微信授權(quán)登錄接口獲取openid:

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

響應(yīng):

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

然后調(diào)用小程序登錄接口:

POST /login/miniapp HTTP/1.1
Host: localhost:8080
Content-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

到此這篇關(guān)于Spring Security 一鍵接入驗(yàn)證碼登錄和小程序登錄的文章就介紹到這了,更多相關(guān)Spring Security 一鍵接入登錄內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

百色市| 蓬溪县| 仁寿县| 侯马市| 洛浦县| 成武县| 清丰县| 临泉县| 陵水| 宜阳县| 宁德市| 湘潭市| 惠东县| 肇东市| 名山县| 青海省| 博白县| 田林县| 江永县| 淮滨县| 拉孜县| 饶阳县| 文成县| 慈溪市| 利津县| 名山县| 临江市| 阜新市| 康保县| 伊宁市| 普洱| 德令哈市| 淮安市| 霍州市| 河池市| 伊吾县| 辰溪县| 泾川县| 公安县| 龙陵县| 拜泉县|