在线用户,验证码,bug修复,代码优化

This commit is contained in:
吕金泽
2022-03-16 10:38:26 +08:00
parent 6401c76e65
commit bdea28e66e
38 changed files with 1042 additions and 132 deletions
@@ -0,0 +1,10 @@
{
"properties" : { },
"id" : "d95a58e77d314370862ffc4cdfdb8283",
"name" : "在线用户",
"type" : "api",
"parentId" : "02df51e4d7184780a98b632f43dc5848",
"path" : "/online",
"paths" : [ ],
"options" : [ ]
}
@@ -0,0 +1,126 @@
{
"properties" : { },
"id" : "d5ccf62c6d2c482e995ce7fe237e9ed3",
"script" : null,
"groupId" : "d95a58e77d314370862ffc4cdfdb8283",
"name" : "列表",
"createTime" : null,
"updateTime" : 1647396892675,
"lock" : null,
"createBy" : null,
"updateBy" : null,
"path" : "/list",
"method" : "POST",
"parameters" : [ ],
"options" : [ ],
"requestBody" : "",
"headers" : [ ],
"paths" : [ ],
"responseBody" : "{\n \"code\": 200,\n \"message\": \"success\",\n \"data\": [\"cb63a01c-63d7-4722-a2c4-48fffa4b3502\", \"876dd178-0065-42d5-989a-a6ef460113b1\"],\n \"timestamp\": 1647396771372,\n \"executeTime\": 11\n}",
"description" : null,
"requestBodyDefinition" : null,
"responseBodyDefinition" : {
"name" : "",
"value" : "",
"description" : "",
"required" : false,
"dataType" : "Object",
"type" : null,
"defaultValue" : null,
"validateType" : "",
"error" : "",
"expression" : "",
"children" : [ {
"name" : "code",
"value" : "200",
"description" : "",
"required" : false,
"dataType" : "Integer",
"type" : null,
"defaultValue" : null,
"validateType" : "",
"error" : "",
"expression" : "",
"children" : [ ]
}, {
"name" : "message",
"value" : "success",
"description" : "",
"required" : false,
"dataType" : "String",
"type" : null,
"defaultValue" : null,
"validateType" : "",
"error" : "",
"expression" : "",
"children" : [ ]
}, {
"name" : "data",
"value" : "",
"description" : "",
"required" : false,
"dataType" : "Object",
"type" : null,
"defaultValue" : null,
"validateType" : "",
"error" : "",
"expression" : "",
"children" : [ {
"name" : "",
"value" : "cb63a01c-63d7-4722-a2c4-48fffa4b3502",
"description" : "",
"required" : false,
"dataType" : "String",
"type" : null,
"defaultValue" : null,
"validateType" : "",
"error" : "",
"expression" : "",
"children" : [ ]
} ]
}, {
"name" : "timestamp",
"value" : "1647396771372",
"description" : "",
"required" : false,
"dataType" : "Long",
"type" : null,
"defaultValue" : null,
"validateType" : "",
"error" : "",
"expression" : "",
"children" : [ ]
}, {
"name" : "executeTime",
"value" : "11",
"description" : "",
"required" : false,
"dataType" : "Object",
"type" : null,
"defaultValue" : null,
"validateType" : "",
"error" : "",
"expression" : "",
"children" : [ ]
} ]
}
}
================================
import cn.dev33.satoken.stp.StpUtil
var tokens = StpUtil.searchTokenValue("", -1, 0).map(it => it.replace('token:login:token:', ''))
return db.page("""
select
su.username,
so.name office_name,
sll.token,
sll.ip,
sll.browser,
sll.os,
sll.create_date
from sys_login_log sll left join sys_user su on sll.username = su.username left join sys_office so on su.office_id = so.id
where sll.token in (#{tokens})
?{username, and su.username like concat('%', #{username}, '%')}
?{ip, and sll.ip like concat('%', #{ip}, '%')}
order by sll.create_date desc
""")
@@ -0,0 +1,26 @@
{
"properties" : { },
"id" : "01fb971510764df3be20209905e86fab",
"script" : null,
"groupId" : "d95a58e77d314370862ffc4cdfdb8283",
"name" : "踢人",
"createTime" : null,
"updateTime" : 1647397091507,
"lock" : null,
"createBy" : null,
"updateBy" : null,
"path" : "/logout",
"method" : "GET",
"parameters" : [ ],
"options" : [ ],
"requestBody" : "",
"headers" : [ ],
"paths" : [ ],
"responseBody" : null,
"description" : null,
"requestBodyDefinition" : null,
"responseBodyDefinition" : null
}
================================
import cn.dev33.satoken.stp.StpUtil
return StpUtil.logoutByTokenValue(token);
+60 -9
View File
@@ -5,13 +5,49 @@
"groupId" : "1952f25c81084e24b55b11385767dc38",
"name" : "登录",
"createTime" : null,
"updateTime" : 1646544815203,
"updateTime" : 1647396539380,
"lock" : "0",
"createBy" : null,
"updateBy" : null,
"path" : "/login",
"method" : "POST",
"parameters" : [ ],
"parameters" : [ {
"name" : "username",
"value" : null,
"description" : null,
"required" : false,
"dataType" : "String",
"type" : null,
"defaultValue" : null,
"validateType" : null,
"error" : null,
"expression" : null,
"children" : null
}, {
"name" : "password",
"value" : null,
"description" : null,
"required" : false,
"dataType" : "String",
"type" : null,
"defaultValue" : null,
"validateType" : null,
"error" : null,
"expression" : null,
"children" : null
}, {
"name" : "code",
"value" : null,
"description" : null,
"required" : false,
"dataType" : "String",
"type" : null,
"defaultValue" : null,
"validateType" : null,
"error" : null,
"expression" : null,
"children" : null
} ],
"options" : [ {
"name" : "require_login",
"value" : "false",
@@ -28,7 +64,7 @@
"requestBody" : "{\r\n \"username\": \"admin\",\r\n \"password\": \"123456\"\r\n}",
"headers" : [ ],
"paths" : [ ],
"responseBody" : "{\"code\":200,\"message\":\"success\",\"data\":\"60f0ddf8-c42c-4b3e-802f-7482f6bd1075\",\"timestamp\":1646493023758,\"executeTime\":316}",
"responseBody" : "{\n \"code\": 200,\n \"message\": \"success\",\n \"data\": \"cb63a01c-63d7-4722-a2c4-48fffa4b3502\",\n \"timestamp\": 1647395770056,\n \"executeTime\": 20\n}",
"description" : null,
"requestBodyDefinition" : {
"name" : "",
@@ -104,10 +140,10 @@
"children" : [ ]
}, {
"name" : "data",
"value" : "60f0ddf8-c42c-4b3e-802f-7482f6bd1075",
"value" : "cb63a01c-63d7-4722-a2c4-48fffa4b3502",
"description" : "",
"required" : false,
"dataType" : "String",
"dataType" : "Object",
"type" : null,
"defaultValue" : null,
"validateType" : "",
@@ -116,7 +152,7 @@
"children" : [ ]
}, {
"name" : "timestamp",
"value" : "1646493023758",
"value" : "1647395770056",
"description" : "",
"required" : false,
"dataType" : "Long",
@@ -128,7 +164,7 @@
"children" : [ ]
}, {
"name" : "executeTime",
"value" : "316",
"value" : "20",
"description" : "",
"required" : false,
"dataType" : "Integer",
@@ -147,6 +183,15 @@ import 'cn.dev33.satoken.secure.SaSecureUtil';
import 'cn.dev33.satoken.stp.StpUtil';
import env;
import request;
import org.ssssssss.magicboot.model.CodeCacheMap
import cn.hutool.http.useragent.UserAgentUtil
import cn.hutool.http.useragent.UserAgent
UserAgent ua = UserAgentUtil.parse(request.getHeaders("User-Agent")[0])
if(body.code != CodeCacheMap.get(body.uuid)){
exit 0, '验证码错误'
}
var user
if(env.get('super-password') == body.password){
@@ -158,15 +203,21 @@ if(env.get('super-password') == body.password){
var loginLog = {
username: body.username,
type: '成功',
ip: request.getClientIP()
ip: request.getClientIP(),
browser: ua.getBrowser().toString(),
os: ua.getOs().toString()
}
if(!user){
loginLog.failPassword = body.password
loginLog.type = '失败'
db.table("sys_login_log").primary("id").save(loginLog);
exit 0,'用户名或密码错误'
}
db.table("sys_login_log").primary("id").save(loginLog);
StpUtil.login(user.id)
var token = StpUtil.getTokenValueByLoginId(user.id)
loginLog.token = token
db.table("sys_login_log").primary("id").save(loginLog);
CodeCacheMap.remove(body.uuid)
return StpUtil.getTokenValueByLoginId(user.id)
@@ -0,0 +1,149 @@
{
"properties" : { },
"id" : "be89865140ab409085db6d0cc6d82452",
"script" : null,
"groupId" : "1952f25c81084e24b55b11385767dc38",
"name" : "验证码",
"createTime" : null,
"updateTime" : 1647333578623,
"lock" : null,
"createBy" : null,
"updateBy" : null,
"path" : "/verification/code",
"method" : "GET",
"parameters" : [ ],
"options" : [ {
"name" : "require_login",
"value" : "false",
"description" : "该接口需要登录才允许访问",
"required" : false,
"dataType" : "String",
"type" : null,
"defaultValue" : null,
"validateType" : null,
"error" : null,
"expression" : null,
"children" : null
} ],
"requestBody" : "",
"headers" : [ ],
"paths" : [ ],
"responseBody" : "{\n \"code\": 200,\n \"message\": \"success\",\n \"data\": {\n \"img\": \"data:image/png;base64,[B@65617f6d\",\n \"uuid\": \"9a080e570e0346bf8b80c035c977c888\"\n },\n \"timestamp\": 1647333558240,\n \"executeTime\": 15\n}",
"description" : null,
"requestBodyDefinition" : null,
"responseBodyDefinition" : {
"name" : "",
"value" : "",
"description" : "",
"required" : false,
"dataType" : "Object",
"type" : null,
"defaultValue" : null,
"validateType" : "",
"error" : "",
"expression" : "",
"children" : [ {
"name" : "code",
"value" : "200",
"description" : "",
"required" : false,
"dataType" : "Integer",
"type" : null,
"defaultValue" : null,
"validateType" : "",
"error" : "",
"expression" : "",
"children" : [ ]
}, {
"name" : "message",
"value" : "success",
"description" : "",
"required" : false,
"dataType" : "String",
"type" : null,
"defaultValue" : null,
"validateType" : "",
"error" : "",
"expression" : "",
"children" : [ ]
}, {
"name" : "data",
"value" : "",
"description" : "",
"required" : false,
"dataType" : "Object",
"type" : null,
"defaultValue" : null,
"validateType" : "",
"error" : "",
"expression" : "",
"children" : [ {
"name" : "img",
"value" : "data:image/png;base64,[B@65617f6d",
"description" : "",
"required" : false,
"dataType" : "String",
"type" : null,
"defaultValue" : null,
"validateType" : "",
"error" : "",
"expression" : "",
"children" : [ ]
}, {
"name" : "uuid",
"value" : "9a080e570e0346bf8b80c035c977c888",
"description" : "",
"required" : false,
"dataType" : "String",
"type" : null,
"defaultValue" : null,
"validateType" : "",
"error" : "",
"expression" : "",
"children" : [ ]
} ]
}, {
"name" : "timestamp",
"value" : "1647333558240",
"description" : "",
"required" : false,
"dataType" : "Long",
"type" : null,
"defaultValue" : null,
"validateType" : "",
"error" : "",
"expression" : "",
"children" : [ ]
}, {
"name" : "executeTime",
"value" : "15",
"description" : "",
"required" : false,
"dataType" : "Integer",
"type" : null,
"defaultValue" : null,
"validateType" : "",
"error" : "",
"expression" : "",
"children" : [ ]
} ]
}
}
================================
import cn.hutool.captcha.LineCaptcha
import cn.hutool.captcha.CaptchaUtil
import log
import java.io.ByteArrayOutputStream
import java.io.OutputStream
import org.ssssssss.magicboot.model.CodeCacheMap
LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(100, 48);
var uuid = UUID.randomUUID().toString().replace('-', '')
CodeCacheMap.put(uuid, lineCaptcha.getCode())
OutputStream bOut = new ByteArrayOutputStream();
lineCaptcha.write(bOut)
var bytes = bOut.toByteArray()
return {
img: bytes,
uuid: uuid
}