1. 介绍

为rest接口的认证/api/login 提供简单的验证码保护功能

自从版本1.4.0.0 后,避免nginx和vue中对"_"的转义,变量改为驼峰表达式模式 为gbRestCaptchaUnionCode 和 gbRestCaptchaString

2. 使用

可以通过以下方式在工程中添加

2.1. build.gradle文件

    implementation('org.yunchen.gb:gb-plugin-springsecurity-rest-captcha:1.4.0.0.M1')
通过redis进行验证码的存取,因此也需要对redis进行配置(参看data-redis 插件)

2.2. application.yml文件

在application.yml文件中加入如下的配置,注意gb顶级项的合并

gb:
  springsecurity:
    rest:
      captcha:
        enabled: true
        expiration: 60
        allowedNumberOfAttempts: 5
        length: 6
        charset: ABCDEFGHIDKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
        font : Serif
        height : 200
        width  : 200
        fontSize : 24
        bottomPadding : 16
        lineSpacing : 10
spring:
  redis:
    cacheTtl: ofHours #ofDays,ofMillis,ofMinutes,ofNanos,ofSeconds
    ttlValue: 1
    cacheNamePrefix: gb
    host: 127.0.0.1
    port: 6379
    password: 123456
    database: 1
    lettuce:
      pool:
        max-active: 8
        max-idle: 8
        min-idle: 0
        max-wait: -1

2.3. 调用步骤

2.3.1. 启用rest 验证码

在application.yml文件启用此功能

gb:
  springsecurity:
    rest:
      captcha:
        enabled: true

2.4. 获取验证码图片

访问 /login/restCaptchaImg 地址,post、get方式都可以,需要提供参数unionCode,表明获取的验证码的唯一ID 如 : /login/restCaptchaImg?unionCode=4d2c3c4722b44819921a1d4cee1f2d11

返回图片二进制流

同时在response的header中有名为GB_REST_CAPTCHA_UNION_CODE 值为 4d2c3c4722b44819921a1d4cee1f2d11 的属性信息

2.4.1. 进行rest的登录验证

新版本变量

自从版本1.4.0.0 后,避免nginx和vue中对"_"的转义,变量改为驼峰表达式模式 为gbRestCaptchaUnionCode 和 gbRestCaptchaString

具体交互逻辑如下,还是老版本的交互逻辑

老版本的变量

访问/api/login地址,并在request的header中增加两项GB_REST_CAPTCHA_UNION_CODE和GB_REST_CAPTCHA_STRING

如:GB_REST_CAPTCHA_UNION_CODE=4d2c3c4722b44819921a1d4cee1f2d11 GB_REST_CAPTCHA_STRING = KUuEiD

并像正常情况下,在body中增加row数据 {"username":"user","password":"user"}

获得正常返回json如下

{
    "username": "user",
    "roles": [
        "ROLE_USER"
    ],
    "token_type": "Bearer",
    "access_token": "eyJhbGciOiJIUzI1NiJ9.eyJwcmluY2lwYWwiOiJINHNJQUFBQUFBQUFBSldSUDJcL1RRQmpHWDRlZ2doaWdTQ0F4Z0JqTWh2d25hc0JSdXBESVJVcXRwb3BKS1VVQ1hjNlg5TnJ6blRtZkUyZEIyUmlSUUVoSXJJeDhFeVkrQUIraE15dDNOSzBEUzhWTjVcL2RlXC81N25mZDV2SjNBNWw3Q0p1WU5GNm1DVVVUNFdEa0ZPeG9vSjVVNmVTY29uT2NHRnBHcnVGRG1SQ1ZHSXN0enBDa21HK2h0T2oxVURLNElhVFJUY2pJN1FGTGtNOFluYkh4MFJyTnFsaElhUWt5VnZMRkZLWmtJZU8rZGtyR2xcLzRTdTA5YlVHYXdld2pqQVdCVmM3Z29kbFJpVkpEdUJHVllzRVBqYWxXMWlcL0VLNG9ZdmxxNnhyaGFNUklFc0UxVktoRG9WVXB5UlZjUHpWYktNcmNtS2gyQkZjeWxPZmEzVCtUeE1wWU4rXC9HSnRjVHZJRzNVQzh6U3g4ZDRnUFQ2aGlPam9ZeFBUVVZQTGVIUEJVSkhWTWpydm1MdXg5K3ZQK3lHTllBZENZUExcLzZucXRcL3B3T0w3cTFcLzNcL2dSdFlRVzNWNnhYYmUweTAyN1dLXC9JelNZenl6OCs3SHorZHZIdDVTU3VianEzXC8zNGY5WkpuY3ZDdlNERW1reE1xT05IWldOM2NONzF3TVA5dkMzSWxwbWpIeVZDS3VTSEl1VVlIMXVIVXAyRm5lQ3E0TytsSDRlaGlIZzFMQnB0MUF0dVwvWno1UERmYnkzTWU0VnZiM21DemIxWmF1M1QrZ0FaZUY4TjNHYk85NTJaeHI2ZlhkcnV4QXowVzhVczI2c29HNkdWSEFcL1FJR0hSNEhcL3FPbTFObERROEphMzFpaDQ3SG1lXC94dERkbHduS3dNQUFBPT0iLCJzdWIiOiJ1c2VyIiwicm9sZXMiOlsiUk9MRV9VU0VSIl0sImV4cCI6MTUzMzQ2MjgyOSwiaWF0IjoxNTMzNDU5MjI5fQ.JZ0gbPGLHfudjNtLb-dTGnwKkdGCRG-xYEdk7f1P99g",
    "expires_in": 3600,
    "refresh_token": "eyJhbGciOiJIUzI1NiJ9.eyJwcmluY2lwYWwiOiJINHNJQUFBQUFBQUFBSldSUDJcL1RRQmpHWDRlZ2doaWdTQ0F4Z0JqTWh2d25hc0JSdXBESVJVcXRwb3BKS1VVQ1hjNlg5TnJ6blRtZkUyZEIyUmlSUUVoSXJJeDhFeVkrQUIraE15dDNOSzBEUzhWTjVcL2RlXC81N25mZDV2SjNBNWw3Q0p1WU5GNm1DVVVUNFdEa0ZPeG9vSjVVNmVTY29uT2NHRnBHcnVGRG1SQ1ZHSXN0enBDa21HK2h0T2oxVURLNElhVFJUY2pJN1FGTGtNOFluYkh4MFJyTnFsaElhUWt5VnZMRkZLWmtJZU8rZGtyR2xcLzRTdTA5YlVHYXdld2pqQVdCVmM3Z29kbFJpVkpEdUJHVllzRVBqYWxXMWlcL0VLNG9ZdmxxNnhyaGFNUklFc0UxVktoRG9WVXB5UlZjUHpWYktNcmNtS2gyQkZjeWxPZmEzVCtUeE1wWU4rXC9HSnRjVHZJRzNVQzh6U3g4ZDRnUFQ2aGlPam9ZeFBUVVZQTGVIUEJVSkhWTWpydm1MdXg5K3ZQK3lHTllBZENZUExcLzZucXRcL3B3T0w3cTFcLzNcL2dSdFlRVzNWNnhYYmUweTAyN1dLXC9JelNZenl6OCs3SHorZHZIdDVTU3VianEzXC8zNGY5WkpuY3ZDdlNERW1reE1xT05IWldOM2NONzF3TVA5dkMzSWxwbWpIeVZDS3VTSEl1VVlIMXVIVXAyRm5lQ3E0TytsSDRlaGlIZzFMQnB0MUF0dVwvWno1UERmYnkzTWU0VnZiM21DemIxWmF1M1QrZ0FaZUY4TjNHYk85NTJaeHI2ZlhkcnV4QXowVzhVczI2c29HNkdWSEFcL1FJR0hSNEhcL3FPbTFObERROEphMzFpaDQ3SG1lXC94dERkbHduS3dNQUFBPT0iLCJzdWIiOiJ1c2VyIiwicm9sZXMiOlsiUk9MRV9VU0VSIl0sImlhdCI6MTUzMzQ1OTIzMH0.tAsw-1Qf_mOQ79CdcAZ9m3m61E6lMGbpMEWWV_Nr74k"
}

2.4.2. 获取验证码

访问 /login/restCaptcha 地址,post、get方式都可以,需要提供参数unionCode,表明获取的验证码的唯一ID 如 : /login/restCaptcha?unionCode=4d2c3c4722b44819921a1d4cee1f2d11 获取返回如下:

{
    "unionCode": "4d2c3c4722b44819921a1d4cee1f2d11",
    "result": true,
    "captcha": "KUuEiD"
}