queryWrapper = new QueryWrapper().lambda();
+ if (StrUtil.isNotBlank(keyWord)) {
+ queryWrapper.like(ExtLog::getRequest, keyWord);
+ }
+ queryWrapper.orderByDesc(ExtLog::getCreateTime);
Page pageList = extLogService.page(roadPage, queryWrapper);
return PageResponse.ok(pageList.getRecords(), pageList.getTotal());
}
diff --git a/src/main/java/com/laker/admin/module/ext/entity/ExtLog.java b/src/main/java/com/laker/admin/module/ext/entity/ExtLog.java
index 2efb58d..c3f789f 100644
--- a/src/main/java/com/laker/admin/module/ext/entity/ExtLog.java
+++ b/src/main/java/com/laker/admin/module/ext/entity/ExtLog.java
@@ -2,11 +2,13 @@ package com.laker.admin.module.ext.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
-import java.time.LocalDateTime;
-import java.io.Serializable;
+import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.EqualsAndHashCode;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
/**
*
* 日志
@@ -41,6 +43,8 @@ public class ExtLog implements Serializable {
* 浏览器或者app信息
*/
private String client;
+ private String uri;
+ private String method;
/**
* 请求
@@ -52,6 +56,8 @@ public class ExtLog implements Serializable {
*/
private String response;
+ private Boolean status;
+
/**
* 耗时ms
*/
@@ -60,6 +66,7 @@ public class ExtLog implements Serializable {
/**
* 创建时间
*/
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime createTime;
diff --git a/src/main/java/com/laker/admin/module/flow/SnakerflowFacetsController.java b/src/main/java/com/laker/admin/module/flow/SnakerflowFacetsController.java
index 4cad461..ff28488 100644
--- a/src/main/java/com/laker/admin/module/flow/SnakerflowFacetsController.java
+++ b/src/main/java/com/laker/admin/module/flow/SnakerflowFacetsController.java
@@ -6,6 +6,7 @@ import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.laker.admin.framework.PageResponse;
import com.laker.admin.framework.Response;
+import com.laker.admin.framework.aop.Metrics;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
@@ -42,6 +43,7 @@ public class SnakerflowFacetsController {
@GetMapping("/process/modelJson")
@ApiOperation(value = "根据流程定义名称获取流程定义json", tags = "流程引擎-流程")
+ @Metrics
public String getProcess(@RequestParam(required = false) String processId) {
if (StrUtil.isBlank(processId)) {
return "";
@@ -80,6 +82,7 @@ public class SnakerflowFacetsController {
*/
@ApiOperation(value = "根据流程定义ID,删除流程定义", tags = "流程引擎-流程")
@RequestMapping(value = "/process/delete/{id}", method = RequestMethod.GET)
+ @Metrics
public Response processDelete(@PathVariable("id") String id) {
snakerEngineFacets.getEngine().process().undeploy(id);
return Response.ok();
@@ -121,6 +124,7 @@ public class SnakerflowFacetsController {
@ApiOperation(value = "流程定义+流程状态", tags = "流程引擎-流程")
@RequestMapping(value = "/process/json", method = RequestMethod.GET)
+ @Metrics
public Object json(String processId, String orderId) {
Process process = snakerEngineFacets.getEngine().process().getProcessById(processId);
AssertHelper.notNull(process);
diff --git a/src/main/java/com/laker/admin/module/sys/controller/LoginController.java b/src/main/java/com/laker/admin/module/sys/controller/LoginController.java
index bdcbf06..432d04a 100644
--- a/src/main/java/com/laker/admin/module/sys/controller/LoginController.java
+++ b/src/main/java/com/laker/admin/module/sys/controller/LoginController.java
@@ -3,10 +3,12 @@ package com.laker.admin.module.sys.controller;
import cn.dev33.satoken.annotation.SaCheckLogin;
import cn.dev33.satoken.stp.StpUtil;
import cn.hutool.core.util.StrUtil;
+import cn.hutool.crypto.SecureUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.github.xiaoymin.knife4j.annotations.ApiSupport;
import com.laker.admin.framework.Response;
+import com.laker.admin.framework.aop.Metrics;
import com.laker.admin.framework.cache.ICache;
import com.laker.admin.module.sys.entity.SysUser;
import com.laker.admin.module.sys.service.ISysUserService;
@@ -14,6 +16,7 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
@@ -23,6 +26,7 @@ import org.springframework.web.bind.annotation.RestController;
@ApiSupport(order = 2)
@RestController
@Slf4j
+@Metrics
public class LoginController {
@Autowired
@@ -33,7 +37,7 @@ public class LoginController {
@PostMapping("/api/v1/login")
@ApiOperationSupport(order = 1)
@ApiOperation(value = "登录")
- public Response login(@RequestBody LoginDto loginDto) {
+ public Response login(@Validated @RequestBody LoginDto loginDto) {
log.info("login {}", loginDto);
// 验证码是否正确
String code = iCache.get(loginDto.getUid());
@@ -43,7 +47,7 @@ public class LoginController {
// 单机版:在map中创建了会话,token id等映射关系 // 写入cookie
SysUser sysUser = sysUserService.getOne(Wrappers.lambdaQuery()
.eq(SysUser::getUserName, loginDto.getUsername())
- .eq(SysUser::getPassword, loginDto.getPassword()));
+ .eq(SysUser::getPassword, SecureUtil.sha256(loginDto.getPassword())));
if (sysUser == null) {
return Response.error("5001", "用户名或密码不正确");
}
diff --git a/src/main/java/com/laker/admin/module/sys/controller/LoginDto.java b/src/main/java/com/laker/admin/module/sys/controller/LoginDto.java
index 5e5b5ed..ce639f7 100644
--- a/src/main/java/com/laker/admin/module/sys/controller/LoginDto.java
+++ b/src/main/java/com/laker/admin/module/sys/controller/LoginDto.java
@@ -2,14 +2,19 @@ package com.laker.admin.module.sys.controller;
import lombok.Data;
+import javax.validation.constraints.NotBlank;
+
/**
* @author laker
*/
@Data
public class LoginDto {
-
+ @NotBlank(message = "用户名不能为空")
private String username;
+ @NotBlank(message = "密码不能为空")
private String password;
+ @NotBlank(message = "验证码不能为空")
private String captchaCode;
+ @NotBlank(message = "验证码Id不能为空")
private String uid;
}
diff --git a/src/main/java/com/laker/admin/module/sys/controller/SysDeptController.java b/src/main/java/com/laker/admin/module/sys/controller/SysDeptController.java
index 37d372f..a6f5b2e 100644
--- a/src/main/java/com/laker/admin/module/sys/controller/SysDeptController.java
+++ b/src/main/java/com/laker/admin/module/sys/controller/SysDeptController.java
@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.laker.admin.framework.Response;
import com.laker.admin.framework.ResultTable;
import com.laker.admin.framework.ResultTree;
+import com.laker.admin.framework.aop.Metrics;
import com.laker.admin.module.sys.entity.SysDept;
import com.laker.admin.module.sys.service.ISysDeptService;
import io.swagger.annotations.ApiOperation;
@@ -24,6 +25,7 @@ import java.util.List;
*/
@RestController
@RequestMapping("/sys/dept")
+@Metrics
public class SysDeptController {
@Autowired
ISysDeptService sysDeptService;
diff --git a/src/main/java/com/laker/admin/module/sys/controller/SysDictController.java b/src/main/java/com/laker/admin/module/sys/controller/SysDictController.java
index 23c0a62..9edb652 100644
--- a/src/main/java/com/laker/admin/module/sys/controller/SysDictController.java
+++ b/src/main/java/com/laker/admin/module/sys/controller/SysDictController.java
@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.laker.admin.framework.PageResponse;
import com.laker.admin.framework.Response;
+import com.laker.admin.framework.aop.Metrics;
import com.laker.admin.module.sys.entity.SysDict;
import com.laker.admin.module.sys.service.ISysDictService;
import io.swagger.annotations.ApiOperation;
@@ -22,6 +23,7 @@ import org.springframework.web.bind.annotation.*;
*/
@RestController
@RequestMapping("/sys/dict")
+@Metrics
public class SysDictController {
@Autowired
ISysDictService sysDictService;
diff --git a/src/main/java/com/laker/admin/module/sys/controller/SysMenuController.java b/src/main/java/com/laker/admin/module/sys/controller/SysMenuController.java
index 7dfbe68..efabc58 100644
--- a/src/main/java/com/laker/admin/module/sys/controller/SysMenuController.java
+++ b/src/main/java/com/laker/admin/module/sys/controller/SysMenuController.java
@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.laker.admin.framework.Response;
+import com.laker.admin.framework.aop.Metrics;
import com.laker.admin.module.sys.entity.SysMenu;
import com.laker.admin.module.sys.pojo.MenuVo;
import com.laker.admin.module.sys.service.ISysMenuService;
@@ -24,6 +25,7 @@ import java.util.List;
*/
@RestController
@RequestMapping("/sys/menu")
+@Metrics
public class SysMenuController {
@Autowired
ISysMenuService sysMenuService;
diff --git a/src/main/java/com/laker/admin/module/sys/controller/SysRoleController.java b/src/main/java/com/laker/admin/module/sys/controller/SysRoleController.java
index 053864f..ac69d04 100644
--- a/src/main/java/com/laker/admin/module/sys/controller/SysRoleController.java
+++ b/src/main/java/com/laker/admin/module/sys/controller/SysRoleController.java
@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.laker.admin.framework.PageResponse;
import com.laker.admin.framework.Response;
import com.laker.admin.framework.ResultTree;
+import com.laker.admin.framework.aop.Metrics;
import com.laker.admin.module.sys.entity.SysMenu;
import com.laker.admin.module.sys.entity.SysRole;
import com.laker.admin.module.sys.entity.SysRolePower;
@@ -31,6 +32,7 @@ import java.util.List;
*/
@RestController
@RequestMapping("/sys/role")
+@Metrics
public class SysRoleController {
@Autowired
ISysRoleService sysRoleService;
diff --git a/src/main/java/com/laker/admin/module/sys/controller/SysUserController.java b/src/main/java/com/laker/admin/module/sys/controller/SysUserController.java
index aeb354f..e417dfc 100644
--- a/src/main/java/com/laker/admin/module/sys/controller/SysUserController.java
+++ b/src/main/java/com/laker/admin/module/sys/controller/SysUserController.java
@@ -1,12 +1,15 @@
package com.laker.admin.module.sys.controller;
+import cn.dev33.satoken.stp.StpUtil;
import cn.hutool.core.util.StrUtil;
+import cn.hutool.crypto.SecureUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.laker.admin.framework.PageResponse;
import com.laker.admin.framework.Response;
+import com.laker.admin.framework.aop.Metrics;
import com.laker.admin.module.sys.entity.SysRole;
import com.laker.admin.module.sys.entity.SysUser;
import com.laker.admin.module.sys.entity.SysUserRole;
@@ -33,6 +36,7 @@ import java.util.List;
*/
@RestController
@RequestMapping("/sys/user")
+@Metrics
public class SysUserController {
@Autowired
ISysUserService sysUserService;
@@ -64,6 +68,12 @@ public class SysUserController {
public Response saveOrUpdate(@RequestBody SysUser param) {
if (param.getUserId() == null) {
+ // 只有超级管理员才能创建用户
+ if (StpUtil.getLoginIdAsLong() != 1L) {
+ return Response.error("403", "只有超级管理员才能创建用户!");
+ }
+ String password = param.getPassword();
+ param.setPassword(SecureUtil.sha256(password));
param.setCreateTime(LocalDateTime.now());
sysUserService.save(param);
if (StrUtil.isNotBlank(param.getRoleIds())) {
diff --git a/src/main/java/com/laker/admin/module/sys/controller/WebLogController.java b/src/main/java/com/laker/admin/module/sys/controller/WebLogController.java
index e7655a6..1de2f47 100644
--- a/src/main/java/com/laker/admin/module/sys/controller/WebLogController.java
+++ b/src/main/java/com/laker/admin/module/sys/controller/WebLogController.java
@@ -9,10 +9,11 @@ import org.springframework.boot.logging.LoggerGroups;
import org.springframework.boot.logging.LoggingSystem;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;
+import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.ResponseBody;
import java.io.File;
@@ -24,7 +25,7 @@ import java.io.File;
* @author laker
* @since 2021-08-05
*/
-@RestController
+@Controller
@RequestMapping("/sys/weblog")
public class WebLogController {
@Autowired
@@ -36,6 +37,7 @@ public class WebLogController {
@GetMapping(value = "/file", produces = "text/plain; charset=UTF-8")
+ @ResponseBody
public Resource logFile(@RequestParam(required = false) String filePath) {
String lookFilePath = lakerConfig.getLogFilePath();
if (StrUtil.isNotBlank(filePath)) {
@@ -49,6 +51,7 @@ public class WebLogController {
}
@RequestMapping(value = "/level") //动态设置日志级别
+ @ResponseBody
public String configureLogLevel(String name, LogLevel configuredLevel) {
if (StrUtil.isBlank(name)) {
return "请输入日志名称";
diff --git a/src/main/java/com/laker/admin/module/sys/service/impl/SysMenuServiceImpl.java b/src/main/java/com/laker/admin/module/sys/service/impl/SysMenuServiceImpl.java
index 66ea3a1..a130c0b 100644
--- a/src/main/java/com/laker/admin/module/sys/service/impl/SysMenuServiceImpl.java
+++ b/src/main/java/com/laker/admin/module/sys/service/impl/SysMenuServiceImpl.java
@@ -70,7 +70,7 @@ public class SysMenuServiceImpl extends ServiceImpl impl
List roleIds = userRoles.stream().map(sysUserRole -> sysUserRole.getRoleId()).collect(Collectors.toList());
List rolePowerLists = sysRolePowerService.list(Wrappers.lambdaQuery().in(SysRolePower::getRoleId, roleIds));
List powerIds = rolePowerLists.stream().map(sysRolePower -> sysRolePower.getPowerId()).collect(Collectors.toList());
- return menuService.list(Wrappers.lambdaQuery().in(SysMenu::getMenuId, powerIds).eq(SysMenu::getEnable, true).orderByDesc(SysMenu::getSort));
+ return menuService.list(Wrappers.lambdaQuery().in(SysMenu::getMenuId, powerIds).eq(SysMenu::getEnable, true).orderByAsc(SysMenu::getSort));
}
}
diff --git a/src/main/java/com/laker/admin/utils/http/HttpServletRequestUtil.java b/src/main/java/com/laker/admin/utils/http/HttpServletRequestUtil.java
index e02450d..609a715 100644
--- a/src/main/java/com/laker/admin/utils/http/HttpServletRequestUtil.java
+++ b/src/main/java/com/laker/admin/utils/http/HttpServletRequestUtil.java
@@ -1,6 +1,9 @@
package com.laker.admin.utils.http;
import cn.hutool.core.util.StrUtil;
+import cn.hutool.http.useragent.UserAgent;
+import cn.hutool.http.useragent.UserAgentUtil;
+import cn.hutool.json.JSONUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.StreamUtils;
import org.springframework.util.StringUtils;
@@ -46,6 +49,18 @@ public class HttpServletRequestUtil {
}
+ /**
+ * 获取getRequestURI
+ *
+ * @return
+ */
+ public static String getRequestUserAgent() {
+ HttpServletRequest request = getRequest();
+ UserAgent userAgent = UserAgentUtil.parse(request.getHeader("User-Agent"));
+ return JSONUtil.toJsonStr(userAgent);
+
+ }
+
public static String getRemoteAddress() {
HttpServletRequest request = getRequest();
if (request == null) {
diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml
index 93236b9..6bea1f1 100644
--- a/src/main/resources/application.yaml
+++ b/src/main/resources/application.yaml
@@ -22,12 +22,6 @@ spring:
thread-name-prefix: laker-
freemarker:
suffix: .ftl
-logging:
- file:
- max-size: 10MB
- max-history: 50
- name: laker.log
- path: ./
mybatis-plus:
type-aliases-package: org.snaker.engine.entity
knife4j:
diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml
index bbccb81..e1f5452 100644
--- a/src/main/resources/logback.xml
+++ b/src/main/resources/logback.xml
@@ -1,21 +1,31 @@
-
+
+
${LOG_HOME}/laker.log
true
false
+
%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{50} %line - %m%n
+
+ ${ENCODING}
-
- ${LOG_HOME}/test.log.%d{yyyy-MM-dd}
-
+
+ ${LOG_HOME}/laker-%d{yyyy-MM-dd}-%i.log
+
15
+
+ 20GB
+
+
+ 10MB
+
diff --git a/src/test/java/com/laker/admin/service/Test.java b/src/test/java/com/laker/admin/service/Test.java
new file mode 100644
index 0000000..508ed56
--- /dev/null
+++ b/src/test/java/com/laker/admin/service/Test.java
@@ -0,0 +1,11 @@
+package com.laker.admin.service;
+
+import cn.hutool.crypto.SecureUtil;
+
+public class Test {
+
+ public static void main(String[] args) {
+ String s = SecureUtil.sha256("lakernote");
+ System.out.println(s);
+ }
+}
diff --git a/web/admin/view/ext/log.html b/web/admin/view/ext/log.html
index 1c1c596..7f2433f 100644
--- a/web/admin/view/ext/log.html
+++ b/web/admin/view/ext/log.html
@@ -68,49 +68,52 @@
title: '用户id',
field: 'userId',
align: 'center',
- width: 120
+ width: 80
},
{
- title: 'ip地址',
+ title: '请求IP',
field: 'ip',
align: 'center',
- width: 120
+ width: 100
},
{
- title: '浏览器或者app信息',
- field: 'client',
- align: 'center',
- width: 120
+ title: '请求方法',
+ field: 'method',
+ align: 'center'
},
{
- title: '请求',
+ title: '请求URI',
+ field: 'uri',
+ align: 'center'
+ },
+ {
+ title: '请求内容',
field: 'request',
- align: 'center',
- width: 120
+ align: 'center'
},
{
- title: '响应',
+ title: '响应内容',
field: 'response',
align: 'center',
- width: 120
+ width: 150
},
{
title: '耗时ms',
field: 'cost',
align: 'center',
- width: 120
+ width: 80
+ },
+ {
+ title: 'Client信息',
+ field: 'client',
+ align: 'center',
+ width: 80
},
{
title: '创建时间',
field: 'createTime',
align: 'center',
- width: 120
- },
- {
- title: '操作',
- toolbar: '#record-toolbar',
- align: 'center',
- width: 180
+ width: 150
}
]
]
@@ -121,7 +124,9 @@
let uri = "/ext/" + module;
easyAdmin.tableRender({
url: uri,
- cols: cols
+ cols: cols,
+ toolbar: null,
+ defaultToolbar: null
});
easyAdmin.TableTool(uri, module);
easyAdmin.TableToolBar(uri, module);
diff --git a/web/admin/view/system/user/edit.html b/web/admin/view/system/user/edit.html
index ab293f8..2301a3c 100644
--- a/web/admin/view/system/user/edit.html
+++ b/web/admin/view/system/user/edit.html
@@ -31,13 +31,6 @@
placeholder="请输入标题" class="layui-input">
-