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" }