mirror of https://github.com/elunez/eladmin
v1.5 beta版发布,详细查看发行版说明
parent
b066bb9969
commit
8c4fd97ef6
|
@ -1,26 +1,3 @@
|
|||
!.mvn/wrapper/maven-wrapper.jar
|
||||
|
||||
### STS ###
|
||||
.apt_generated
|
||||
.classpath
|
||||
.factorypath
|
||||
.project
|
||||
.settings
|
||||
.springBeans
|
||||
.sts4-cache
|
||||
|
||||
### IntelliJ IDEA ###
|
||||
.mvn
|
||||
.idea
|
||||
*.iws
|
||||
*.iml
|
||||
*.ipr
|
||||
|
||||
### NetBeans ###
|
||||
/nbproject/private/
|
||||
/build/
|
||||
/nbbuild/
|
||||
/dist/
|
||||
/nbdist/
|
||||
/target/
|
||||
/.nb-gradle/
|
||||
.idea/*
|
||||
*/target/*
|
39
README.md
39
README.md
|
@ -1,8 +1,9 @@
|
|||
# eladmin
|
||||
|
||||
项目基于 Spring Boot 2.1.0 、 Spring boot Jpa、 Spring Security、redis、Vue的前后端分离的权限管理系统, 权限控制采用 RBAC(Role-Based Access Control,基于角色的访问控制),前端菜单支持动态路由
|
||||
项目基于 Spring Boot 2.1.0 、 Spring boot Jpa、 Spring Security、redis、Vue的前后端分离的权限管理系统,项目采用分模块开发方式, 权限控制采用 RBAC(Role-Based Access Control,基于角色的访问控制),前端菜单支持动态路由
|
||||
|
||||
#### 前端源码
|
||||
eladmin-qt和eladmin-qd只是命名方式的区别,无其他区别
|
||||
- 码云:[https://gitee.com/elunez/eladmin-qt](https://gitee.com/elunez/eladmin-qt)
|
||||
- github:[https://github.com/elunez/eladmin-qd](https://github.com/elunez/eladmin-qd)
|
||||
|
||||
|
@ -35,8 +36,10 @@
|
|||
- 权限管理 权限细化到接口
|
||||
- 菜单管理 已实现菜单动态路由,后端可配置化,支持多级菜单
|
||||
- 定时任务 整合Quartz做定时任务,加入任务日志,任务运行情况一目了然
|
||||
- 代码生成 高灵活度一键生成前后端代码,减少百分之80左右的工作任务
|
||||
- 系统监控
|
||||
- 系统日志 使用apo记录用户操作日志,并且记录异常堆栈信息
|
||||
- 操作日志 使用apo记录用户操作日志
|
||||
- 异常日志 记录操作过程中的异常,并且提供查看异常的堆栈信息
|
||||
- 系统缓存 使用jedis将缓存操作可视化,并提供对redis的基本操作,可根据需求自行扩展
|
||||
- 实时控制台 实时打印logback日志,来自微强迫症患者的精心配色,更好的监控系统的运行状态
|
||||
- SQL监控 采用druid 监控数据库访问性能,默认用户名admin,密码123456
|
||||
|
@ -51,20 +54,18 @@
|
|||
```
|
||||
#### 项目结构
|
||||
```
|
||||
- common 公共包
|
||||
- aop 记录日志与接口限流
|
||||
- exception 项目异常处理
|
||||
# 项目模块如下
|
||||
- eladmin-common 公共模块
|
||||
- aop.limit 接口限流自定义注解
|
||||
- exception 项目统一异常的处理
|
||||
- mapper mapstruct的通用mapper
|
||||
- redis redis缓存相关配置
|
||||
- swagger2 接口文档配置
|
||||
- utils 通用工具
|
||||
- core 核心包
|
||||
- config JWT的安全过滤器配置与跨域配置
|
||||
- rest 用户授权的接口
|
||||
- security 配置spring security
|
||||
- service 用户登录与权限的处理
|
||||
- utils 包含加密工具与JWT工具
|
||||
- monitor 系统监控
|
||||
- eladmin-system 系统核心模块
|
||||
- config 配置跨域与静态资源
|
||||
- modules 系统相关模块
|
||||
- monitor 系统监控
|
||||
- config 配置日志拦截器与WebSocket等
|
||||
- domain 实体类
|
||||
- repository 数据库操作
|
||||
|
@ -72,9 +73,17 @@
|
|||
- service 业务接口
|
||||
- impl 业务接口实现
|
||||
- query 业务查询
|
||||
- quartz 定时任务
|
||||
- system 系统管理
|
||||
- tools 第三方工具
|
||||
- quartz 定时任务
|
||||
- security 系统安全
|
||||
- config JWT的安全过滤器配置
|
||||
- rest 用户登录授权的接口
|
||||
- security 配置spring security
|
||||
- service 用户登录与权限的处理
|
||||
- utils JWT工具
|
||||
- system 系统管理
|
||||
- eladmin-logging 系统日志模块
|
||||
- eladmin-tools 系统第三方工具模块
|
||||
- eladmin-generator 系统代码生成模块
|
||||
```
|
||||
#### 后端技术栈
|
||||
|
||||
|
|
|
@ -0,0 +1,135 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
|
||||
<component name="FacetManager">
|
||||
<facet type="Spring" name="Spring">
|
||||
<configuration />
|
||||
</facet>
|
||||
<facet type="web" name="Web">
|
||||
<configuration>
|
||||
<webroots />
|
||||
</configuration>
|
||||
</facet>
|
||||
</component>
|
||||
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
|
||||
<output url="file://$MODULE_DIR$/target/classes" />
|
||||
<output-test url="file://$MODULE_DIR$/target/test-classes" />
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/target" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-jpa:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-aop:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.aspectj:aspectjweaver:1.9.2" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.zaxxer:HikariCP:3.2.0" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: javax.transaction:javax.transaction-api:1.3" level="project" />
|
||||
<orderEntry type="library" name="Maven: javax.xml.bind:jaxb-api:2.3.1" level="project" />
|
||||
<orderEntry type="library" name="Maven: javax.activation:javax.activation-api:1.2.0" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.hibernate:hibernate-core:5.3.7.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.jboss.logging:jboss-logging:3.3.2.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: javax.persistence:javax.persistence-api:2.2" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.javassist:javassist:3.23.1-GA" level="project" />
|
||||
<orderEntry type="library" name="Maven: net.bytebuddy:byte-buddy:1.9.3" level="project" />
|
||||
<orderEntry type="library" name="Maven: antlr:antlr:2.7.7" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.jboss:jandex:2.0.5.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.dom4j:dom4j:2.1.1" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.hibernate.common:hibernate-commons-annotations:5.0.4.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-jpa:2.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-commons:2.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-orm:5.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-tx:5.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-beans:5.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-aspects:5.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" />
|
||||
<orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.11.1" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.11.1" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.25" level="project" />
|
||||
<orderEntry type="library" name="Maven: javax.annotation:javax.annotation-api:1.3.2" level="project" />
|
||||
<orderEntry type="library" scope="RUNTIME" name="Maven: org.yaml:snakeyaml:1.23" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.7" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.9.7" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.7" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.7" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.9.7" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.12" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-el:9.0.12" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.12" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.hibernate.validator:hibernate-validator:6.0.13.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: javax.validation:validation-api:2.0.1.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-web:5.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-expression:5.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-starter-test:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test-autoconfigure:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: com.jayway.jsonpath:json-path:2.4.0" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: net.minidev:json-smart:2.3" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: net.minidev:accessors-smart:1.2" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: org.ow2.asm:asm:5.0.4" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: junit:junit:4.12" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: org.assertj:assertj-core:3.11.1" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: org.mockito:mockito-core:2.23.0" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: net.bytebuddy:byte-buddy-agent:1.9.3" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: org.objenesis:objenesis:2.6" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest-core:1.3" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest-library:1.3" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: org.skyscreamer:jsonassert:1.5.0" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: com.vaadin.external.google:android-json:0.0.20131108.vaadin1" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-core:5.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: org.springframework:spring-test:5.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: org.xmlunit:xmlunit-core:2.6.2" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-security:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-aop:5.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.security:spring-security-config:5.1.1.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.security:spring-security-core:5.1.1.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.security:spring-security-web:5.1.1.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-cache:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-context:5.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-context-support:5.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-redis:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-redis:2.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-keyvalue:2.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-oxm:5.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: redis.clients:jedis:2.9.0" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.apache.commons:commons-pool2:2.5.0" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.8.1" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4.1:1.16" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.springfox:springfox-swagger2:2.9.2" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.swagger:swagger-annotations:1.5.20" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.swagger:swagger-models:1.5.20" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.0" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.springfox:springfox-spi:2.9.2" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.springfox:springfox-core:2.9.2" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.springfox:springfox-schema:2.9.2" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.springfox:springfox-swagger-common:2.9.2" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.springfox:springfox-spring-web:2.9.2" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.google.guava:guava:20.0" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.fasterxml:classmate:1.4.0" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.25" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-core:1.2.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-metadata:1.2.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.mapstruct:mapstruct:1.2.0.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.springfox:springfox-swagger-ui:2.9.2" level="project" />
|
||||
<orderEntry type="library" scope="RUNTIME" name="Maven: mysql:mysql-connector-java:8.0.13" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.alibaba:druid-spring-boot-starter:1.1.10" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.alibaba:druid:1.1.10" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.projectlombok:lombok:1.18.2" level="project" />
|
||||
<orderEntry type="library" name="Maven: cn.hutool:hutool-all:4.4.1" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.alibaba:fastjson:1.2.54" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.mapstruct:mapstruct-jdk8:1.2.0.Final" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: org.mapstruct:mapstruct-processor:1.2.0.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: javax.inject:javax.inject:1" level="project" />
|
||||
</component>
|
||||
</module>
|
|
@ -0,0 +1,14 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<artifactId>eladmin</artifactId>
|
||||
<groupId>me.zhengjie</groupId>
|
||||
<version>1.5</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<artifactId>eladmin-common</artifactId>
|
||||
|
||||
</project>
|
|
@ -1,4 +1,6 @@
|
|||
package me.zhengjie.common.aop.limit;
|
||||
package me.zhengjie.aop.limit;
|
||||
|
||||
import me.zhengjie.aspect.LimitType;
|
||||
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
|
@ -1,10 +1,10 @@
|
|||
package me.zhengjie.common.aop.limit;
|
||||
package me.zhengjie.aspect;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import me.zhengjie.common.exception.BadRequestException;
|
||||
import me.zhengjie.common.utils.IpUtil;
|
||||
import me.zhengjie.common.utils.RequestHolder;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import me.zhengjie.aop.limit.Limit;
|
||||
import me.zhengjie.exception.BadRequestException;
|
||||
import me.zhengjie.utils.RequestHolder;
|
||||
import me.zhengjie.utils.StringUtils;
|
||||
import org.aspectj.lang.ProceedingJoinPoint;
|
||||
import org.aspectj.lang.annotation.Around;
|
||||
import org.aspectj.lang.annotation.Aspect;
|
||||
|
@ -17,8 +17,6 @@ import org.springframework.data.redis.core.RedisTemplate;
|
|||
import org.springframework.data.redis.core.script.DefaultRedisScript;
|
||||
import org.springframework.data.redis.core.script.RedisScript;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
|
@ -30,9 +28,8 @@ public class LimitAspect {
|
|||
private static final Logger logger = LoggerFactory.getLogger(LimitAspect.class);
|
||||
|
||||
|
||||
@Pointcut("@annotation(Limit)")
|
||||
@Pointcut("@annotation(me.zhengjie.aop.limit.Limit)")
|
||||
public void pointcut() {
|
||||
//
|
||||
}
|
||||
|
||||
@Around("pointcut()")
|
||||
|
@ -47,7 +44,7 @@ public class LimitAspect {
|
|||
if (StringUtils.isEmpty(key)) {
|
||||
switch (limitType) {
|
||||
case IP:
|
||||
key = IpUtil.getIP(request);
|
||||
key = StringUtils.getIP(request);
|
||||
break;
|
||||
default:
|
||||
key = signatureMethod.getName();
|
|
@ -1,4 +1,4 @@
|
|||
package me.zhengjie.common.aop.limit;
|
||||
package me.zhengjie.aspect;
|
||||
|
||||
public enum LimitType {
|
||||
CUSTOMER,
|
|
@ -1,4 +1,4 @@
|
|||
package me.zhengjie.common.exception;
|
||||
package me.zhengjie.exception;
|
||||
|
||||
import lombok.Getter;
|
||||
import org.springframework.http.HttpStatus;
|
|
@ -1,4 +1,4 @@
|
|||
package me.zhengjie.common.exception;
|
||||
package me.zhengjie.exception;
|
||||
|
||||
import org.springframework.util.StringUtils;
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package me.zhengjie.common.exception;
|
||||
package me.zhengjie.exception;
|
||||
|
||||
import org.springframework.util.StringUtils;
|
||||
|
|
@ -1,7 +1,8 @@
|
|||
package me.zhengjie.common.exception.handler;
|
||||
package me.zhengjie.exception.handler;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import lombok.Data;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
/**
|
|
@ -1,19 +1,17 @@
|
|||
package me.zhengjie.common.exception.handler;
|
||||
package me.zhengjie.exception.handler;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import me.zhengjie.common.exception.BadRequestException;
|
||||
import me.zhengjie.common.exception.EntityExistException;
|
||||
import me.zhengjie.common.exception.EntityNotFoundException;
|
||||
import me.zhengjie.common.utils.ThrowableUtil;
|
||||
import me.zhengjie.exception.BadRequestException;
|
||||
import me.zhengjie.exception.EntityExistException;
|
||||
import me.zhengjie.exception.EntityNotFoundException;
|
||||
import me.zhengjie.utils.ThrowableUtil;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.security.access.AccessDeniedException;
|
||||
import org.springframework.web.bind.MethodArgumentNotValidException;
|
||||
import org.springframework.web.bind.annotation.ExceptionHandler;
|
||||
import org.springframework.web.bind.annotation.RestControllerAdvice;
|
||||
import static org.springframework.http.HttpStatus.BAD_REQUEST;
|
||||
import static org.springframework.http.HttpStatus.FORBIDDEN;
|
||||
import static org.springframework.http.HttpStatus.NOT_FOUND;
|
||||
import java.nio.file.AccessDeniedException;
|
||||
import static org.springframework.http.HttpStatus.*;
|
||||
|
||||
/**
|
||||
* @author jie
|
|
@ -1,4 +1,4 @@
|
|||
package me.zhengjie.common.mapper;
|
||||
package me.zhengjie.mapper;
|
||||
|
||||
import java.util.List;
|
||||
|
|
@ -1,9 +1,10 @@
|
|||
package me.zhengjie.common.redis;
|
||||
package me.zhengjie.redis;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.serializer.SerializerFeature;
|
||||
import org.springframework.data.redis.serializer.RedisSerializer;
|
||||
import org.springframework.data.redis.serializer.SerializationException;
|
||||
|
||||
import java.nio.charset.Charset;
|
||||
|
||||
/**
|
|
@ -1,23 +1,25 @@
|
|||
package me.zhengjie.common.redis;
|
||||
package me.zhengjie.redis;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.parser.ParserConfig;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import me.zhengjie.utils.StringUtils;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||
import org.springframework.cache.interceptor.KeyGenerator;
|
||||
import org.springframework.data.redis.cache.RedisCacheConfiguration;
|
||||
import org.springframework.data.redis.serializer.*;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||
import org.springframework.boot.autoconfigure.data.redis.RedisProperties;
|
||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||
import org.springframework.cache.annotation.CachingConfigurerSupport;
|
||||
import org.springframework.cache.annotation.EnableCaching;
|
||||
import org.springframework.cache.interceptor.KeyGenerator;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.data.redis.cache.RedisCacheConfiguration;
|
||||
import org.springframework.data.redis.connection.RedisConnectionFactory;
|
||||
import org.springframework.data.redis.core.RedisOperations;
|
||||
import org.springframework.data.redis.core.RedisTemplate;
|
||||
import org.springframework.data.redis.serializer.RedisSerializationContext;
|
||||
import org.springframework.data.redis.serializer.StringRedisSerializer;
|
||||
import redis.clients.jedis.JedisPool;
|
||||
import redis.clients.jedis.JedisPoolConfig;
|
||||
import java.time.Duration;
|
||||
|
@ -60,7 +62,7 @@ public class RedisConfig extends CachingConfigurerSupport {
|
|||
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
|
||||
jedisPoolConfig.setMaxIdle(maxIdle);
|
||||
jedisPoolConfig.setMaxWaitMillis(maxWaitMillis);
|
||||
if (StrUtil.isNotBlank(password)) {
|
||||
if (StringUtils.isNotBlank(password)) {
|
||||
return new JedisPool(jedisPoolConfig, host, port, timeout, password);
|
||||
} else {
|
||||
return new JedisPool(jedisPoolConfig, host, port,timeout);
|
||||
|
@ -68,7 +70,7 @@ public class RedisConfig extends CachingConfigurerSupport {
|
|||
}
|
||||
|
||||
/**
|
||||
* 设置 redis 数据默认过期时间
|
||||
* 设置 redis 数据默认过期时间,默认1天
|
||||
* 设置@cacheable 序列化方式
|
||||
* @return
|
||||
*/
|
||||
|
@ -76,7 +78,7 @@ public class RedisConfig extends CachingConfigurerSupport {
|
|||
public RedisCacheConfiguration redisCacheConfiguration(){
|
||||
FastJsonRedisSerializer<Object> fastJsonRedisSerializer = new FastJsonRedisSerializer<>(Object.class);
|
||||
RedisCacheConfiguration configuration = RedisCacheConfiguration.defaultCacheConfig();
|
||||
configuration = configuration.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(fastJsonRedisSerializer)).entryTtl(Duration.ofHours(2));
|
||||
configuration = configuration.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(fastJsonRedisSerializer)).entryTtl(Duration.ofDays(1));
|
||||
return configuration;
|
||||
}
|
||||
|
||||
|
@ -92,10 +94,13 @@ public class RedisConfig extends CachingConfigurerSupport {
|
|||
// 全局开启AutoType,不建议使用
|
||||
// ParserConfig.getGlobalInstance().setAutoTypeSupport(true);
|
||||
// 建议使用这种方式,小范围指定白名单
|
||||
ParserConfig.getGlobalInstance().addAccept("me.zhengjie.system.service.dto");
|
||||
ParserConfig.getGlobalInstance().addAccept("me.zhengjie.system.domain");
|
||||
ParserConfig.getGlobalInstance().addAccept("me.zhengjie.tools.domain");
|
||||
ParserConfig.getGlobalInstance().addAccept("me.zhengjie.quartz.domain");
|
||||
ParserConfig.getGlobalInstance().addAccept("me.zhengjie.modules.system.service.dto");
|
||||
ParserConfig.getGlobalInstance().addAccept("me.zhengjie.modules.test.service.dto");
|
||||
ParserConfig.getGlobalInstance().addAccept("me.zhengjie.modules.system.domain");
|
||||
ParserConfig.getGlobalInstance().addAccept("me.zhengjie.domain");
|
||||
ParserConfig.getGlobalInstance().addAccept("me.zhengjie.modules.quartz.domain");
|
||||
ParserConfig.getGlobalInstance().addAccept("me.zhengjie.modules.monitor.domain");
|
||||
ParserConfig.getGlobalInstance().addAccept("me.zhengjie.modules.security.security");
|
||||
// key的序列化采用StringRedisSerializer
|
||||
template.setKeySerializer(new StringRedisSerializer());
|
||||
template.setHashKeySerializer(new StringRedisSerializer());
|
||||
|
@ -116,9 +121,9 @@ public class RedisConfig extends CachingConfigurerSupport {
|
|||
sb.append(target.getClass().getName());
|
||||
sb.append(method.getName());
|
||||
for (Object obj : params) {
|
||||
sb.append(obj.toString());
|
||||
// 由于参数可能不同, hashCode肯定不一样, 缓存的key也需要不一样
|
||||
sb.append(JSON.toJSONString(obj).hashCode());
|
||||
}
|
||||
log.info(sb.toString());
|
||||
return sb.toString();
|
||||
};
|
||||
}
|
|
@ -1,8 +1,9 @@
|
|||
package me.zhengjie.common.redis;
|
||||
package me.zhengjie.redis;
|
||||
|
||||
import cn.hutool.core.lang.Assert;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import org.springframework.data.redis.serializer.RedisSerializer;
|
||||
|
||||
import java.nio.charset.Charset;
|
||||
|
||||
/**
|
|
@ -1,4 +1,4 @@
|
|||
package me.zhengjie.common.swagger2;
|
||||
package me.zhengjie.swagger2;
|
||||
|
||||
import com.google.common.base.Predicates;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
|
@ -27,11 +27,11 @@ import java.util.List;
|
|||
@Configuration
|
||||
@EnableSwagger2
|
||||
@ComponentScan(basePackages = {
|
||||
"me.zhengjie.core.rest",
|
||||
"me.zhengjie.system.rest",
|
||||
"me.zhengjie.monitor.rest",
|
||||
"me.zhengjie.quartz.rest",
|
||||
"me.zhengjie.tools.rest",})
|
||||
"me.zhengjie.rest",
|
||||
"me.zhengjie.modules.system.rest",
|
||||
"me.zhengjie.modules.monitor.rest",
|
||||
"me.zhengjie.modules.monitor.rest",
|
||||
"me.zhengjie.modules.quartz.rest"})
|
||||
public class SwaggerConfig {
|
||||
|
||||
@Bean
|
||||
|
@ -56,7 +56,7 @@ public class SwaggerConfig {
|
|||
private ApiInfo apiInfo() {
|
||||
return new ApiInfoBuilder()
|
||||
.title("elune 接口文档")
|
||||
.version("1.0")
|
||||
.version("1.5")
|
||||
.build();
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package me.zhengjie.common.utils;
|
||||
package me.zhengjie.utils;
|
||||
|
||||
/**
|
||||
* 常用静态常量
|
||||
|
@ -11,10 +11,6 @@ public class ElAdminConstant {
|
|||
|
||||
public static final String RESET_MAIL = "重置邮箱";
|
||||
|
||||
public static final String EMAIL_CODE = "<p>你的验证码为:";
|
||||
|
||||
public static final String EMAIL_CONTENT = "<p style='text-align: right;'>----- 邮件来自<span style='color: rgb(194, 79, 74);'> <a href='http://auauz.net' target='_blank'>eladmin</a></span> 后台管理系统,系统邮件请勿回复</p>";
|
||||
|
||||
/**
|
||||
* 常用接口
|
||||
*/
|
|
@ -1,6 +1,7 @@
|
|||
package me.zhengjie.core.utils;
|
||||
package me.zhengjie.utils;
|
||||
|
||||
import org.springframework.util.DigestUtils;
|
||||
|
||||
import javax.crypto.Cipher;
|
||||
import javax.crypto.SecretKey;
|
||||
import javax.crypto.SecretKeyFactory;
|
|
@ -1,17 +1,18 @@
|
|||
package me.zhengjie.common.utils;
|
||||
package me.zhengjie.utils;
|
||||
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.text.DecimalFormat;
|
||||
|
||||
/**
|
||||
* File工具类
|
||||
* File工具类,扩展 hutool 工具包
|
||||
* @author jie
|
||||
* @date 2018-12-27
|
||||
*/
|
||||
public class FileUtil {
|
||||
public class FileUtil extends cn.hutool.core.io.FileUtil {
|
||||
|
||||
/**
|
||||
* 定义GB的计算常量
|
|
@ -0,0 +1,51 @@
|
|||
package me.zhengjie.utils;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* List按照指定字段排序工具类
|
||||
* @author jie
|
||||
* @date 2018/08/23 20:03:12
|
||||
* @param <T>
|
||||
*/
|
||||
public class ListSortUtil<T> {
|
||||
|
||||
/**
|
||||
* @param targetList 目标排序List
|
||||
* @param sortField 排序字段(实体类属性名)
|
||||
* @param sortMode 排序方式(asc or desc)
|
||||
*/
|
||||
@SuppressWarnings({ "unchecked", "rawtypes" })
|
||||
public void sort(List<T> targetList, final String sortField, final String sortMode) {
|
||||
|
||||
Collections.sort(targetList, new Comparator() {
|
||||
|
||||
@Override
|
||||
public int compare(Object obj1, Object obj2) {
|
||||
int retVal = 0;
|
||||
try {
|
||||
//首字母转大写
|
||||
String newStr=sortField.substring(0, 1).toUpperCase()+sortField.replaceFirst("\\w","");
|
||||
String methodStr="get"+newStr;
|
||||
|
||||
Method method1 = ((T)obj1).getClass().getMethod(methodStr, new Class[0]);
|
||||
Method method2 = ((T)obj2).getClass().getMethod(methodStr, new Class[0]);
|
||||
if (sortMode != null && "desc".equals(sortMode)) {
|
||||
// 倒序
|
||||
retVal = method2.invoke(((T) obj2), new Object[0]).toString().compareTo(method1.invoke(((T) obj1), new Object[0]).toString());
|
||||
} else {
|
||||
// 正序
|
||||
retVal = method1.invoke(((T) obj1), new Object[0]).toString().compareTo(method2.invoke(((T) obj2), new Object[0]).toString());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException();
|
||||
}
|
||||
return retVal;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
package me.zhengjie.common.utils;
|
||||
package me.zhengjie.utils;
|
||||
|
||||
import org.springframework.data.domain.Page;
|
||||
import java.util.ArrayList;
|
||||
|
@ -8,11 +8,10 @@ import java.util.Map;
|
|||
|
||||
/**
|
||||
* 分页工具
|
||||
*
|
||||
* @author jie
|
||||
* @date 2018-12-10
|
||||
*/
|
||||
public class PageUtil {
|
||||
public class PageUtil extends cn.hutool.core.util.PageUtil {
|
||||
|
||||
/**
|
||||
* List 分页
|
||||
|
@ -48,4 +47,18 @@ public class PageUtil {
|
|||
return map;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param object
|
||||
* @param totalElements
|
||||
* @return
|
||||
*/
|
||||
public static Map toPage(Object object, Object totalElements) {
|
||||
Map map = new HashMap();
|
||||
|
||||
map.put("content",object);
|
||||
map.put("totalElements",totalElements);
|
||||
|
||||
return map;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
package me.zhengjie.common.utils;
|
||||
package me.zhengjie.utils;
|
||||
|
||||
import org.springframework.web.context.request.RequestContextHolder;
|
||||
import org.springframework.web.context.request.ServletRequestAttributes;
|
|
@ -0,0 +1,24 @@
|
|||
package me.zhengjie.utils;
|
||||
|
||||
import me.zhengjie.exception.BadRequestException;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.security.core.userdetails.UserDetails;
|
||||
|
||||
/**
|
||||
* 获取当前登录的用户名
|
||||
*
|
||||
* @author jie
|
||||
* @date 2019-01-17
|
||||
*/
|
||||
public class SecurityContextHolder {
|
||||
|
||||
public static UserDetails getUserDetails() {
|
||||
UserDetails userDetails = null;
|
||||
try {
|
||||
userDetails = (UserDetails) org.springframework.security.core.context.SecurityContextHolder.getContext().getAuthentication().getPrincipal();
|
||||
} catch (Exception e) {
|
||||
throw new BadRequestException(HttpStatus.UNAUTHORIZED, "登录状态过期");
|
||||
}
|
||||
return userDetails;
|
||||
}
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
package me.zhengjie.common.utils;
|
||||
package me.zhengjie.utils;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.BeansException;
|
|
@ -1,9 +1,9 @@
|
|||
package me.zhengjie.common.utils;
|
||||
package me.zhengjie.utils;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import org.springframework.core.io.DefaultResourceLoader;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 字符串工具类, 继承org.apache.commons.lang3.StringUtils类
|
||||
|
@ -13,38 +13,6 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils {
|
|||
private static final char SEPARATOR = '_';
|
||||
private static final String CHARSET_NAME = "UTF-8";
|
||||
|
||||
/**
|
||||
* 转换为字节数组
|
||||
*
|
||||
* @param str
|
||||
* @return
|
||||
*/
|
||||
public static byte[] getBytes(String str) {
|
||||
if (str != null) {
|
||||
try {
|
||||
return str.getBytes(CHARSET_NAME);
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
return null;
|
||||
}
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 转换为字节数组
|
||||
*
|
||||
* @param bytes
|
||||
* @return
|
||||
*/
|
||||
public static String toString(byte[] bytes) {
|
||||
try {
|
||||
return new String(bytes, CHARSET_NAME);
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
return EMPTY;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否包含字符串
|
||||
*
|
||||
|
@ -63,41 +31,6 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils {
|
|||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* 转换为Double类型
|
||||
*/
|
||||
public static Double toDouble(Object val) {
|
||||
if (val == null) {
|
||||
return 0D;
|
||||
}
|
||||
try {
|
||||
return Double.valueOf(trim(val.toString()));
|
||||
} catch (Exception e) {
|
||||
return 0D;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 转换为Float类型
|
||||
*/
|
||||
public static Float toFloat(Object val) {
|
||||
return toDouble(val).floatValue();
|
||||
}
|
||||
|
||||
/**
|
||||
* 转换为Long类型
|
||||
*/
|
||||
public static Long toLong(Object val) {
|
||||
return toDouble(val).longValue();
|
||||
}
|
||||
|
||||
/**
|
||||
* 转换为Integer类型
|
||||
*/
|
||||
public static Integer toInteger(Object val) {
|
||||
return toLong(val).intValue();
|
||||
}
|
||||
|
||||
/**
|
||||
* 驼峰命名法工具
|
||||
*
|
||||
|
@ -184,31 +117,36 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils {
|
|||
}
|
||||
|
||||
/**
|
||||
* 获取工程路径
|
||||
*
|
||||
* 获取ip地址
|
||||
* @param request
|
||||
* @return
|
||||
*/
|
||||
public static String getProjectPath() {
|
||||
String projectPath = "";
|
||||
try {
|
||||
File file = new DefaultResourceLoader().getResource("").getFile();
|
||||
if (file != null) {
|
||||
while (true) {
|
||||
File f = new File(file.getPath() + File.separator + "src" + File.separator + "main");
|
||||
if (f == null || f.exists()) {
|
||||
break;
|
||||
public static String getIP(HttpServletRequest request) {
|
||||
String ip = request.getHeader("x-forwarded-for");
|
||||
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
|
||||
ip = request.getHeader("Proxy-Client-IP");
|
||||
}
|
||||
if (file.getParentFile() != null) {
|
||||
file = file.getParentFile();
|
||||
} else {
|
||||
break;
|
||||
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
|
||||
ip = request.getHeader("WL-Proxy-Client-IP");
|
||||
}
|
||||
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
|
||||
ip = request.getRemoteAddr();
|
||||
}
|
||||
projectPath = file.toString();
|
||||
return "0:0:0:0:0:0:0:1".equals(ip)?"127.0.0.1":ip;
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
|
||||
/**
|
||||
* 获得当天是周几
|
||||
*/
|
||||
public static String getWeekDay(){
|
||||
String[] weekDays = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
|
||||
Calendar cal = Calendar.getInstance();
|
||||
cal.setTime(new Date());
|
||||
|
||||
int w = cal.get(Calendar.DAY_OF_WEEK) - 1;
|
||||
if (w < 0){
|
||||
w = 0;
|
||||
}
|
||||
return projectPath;
|
||||
return weekDays[w];
|
||||
}
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
package me.zhengjie.common.config;
|
||||
package me.zhengjie.utils;
|
||||
|
||||
import com.google.common.util.concurrent.ThreadFactoryBuilder;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
|
@ -10,7 +10,7 @@ import java.util.concurrent.*;
|
|||
* @date 2019-01-08
|
||||
*/
|
||||
@Configuration
|
||||
public class ThreadPoolConfig {
|
||||
public class ThreadPoolUtil {
|
||||
|
||||
@Bean
|
||||
public ExecutorService getThreadPool(){
|
|
@ -1,4 +1,4 @@
|
|||
package me.zhengjie.common.utils;
|
||||
package me.zhengjie.utils;
|
||||
|
||||
import java.io.PrintWriter;
|
||||
import java.io.StringWriter;
|
||||
|
@ -20,7 +20,7 @@ public class ThrowableUtil {
|
|||
PrintWriter pw = new PrintWriter(sw);
|
||||
try {
|
||||
throwable.printStackTrace(pw);
|
||||
return "\n"+sw.toString();
|
||||
return sw.toString();
|
||||
} finally {
|
||||
pw.close();
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
package me.zhengjie.common.utils;
|
||||
package me.zhengjie.utils;
|
||||
|
||||
import me.zhengjie.common.exception.BadRequestException;
|
||||
import me.zhengjie.exception.BadRequestException;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
|
@ -8,7 +8,7 @@ import java.util.Optional;
|
|||
* @author jie
|
||||
* @date 2018-11-23
|
||||
*/
|
||||
public class ValidationUtil {
|
||||
public class ValidationUtil{
|
||||
|
||||
/**
|
||||
* 验证空
|
|
@ -0,0 +1,141 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
|
||||
<component name="FacetManager">
|
||||
<facet type="Spring" name="Spring">
|
||||
<configuration />
|
||||
</facet>
|
||||
<facet type="web" name="Web">
|
||||
<configuration>
|
||||
<webroots />
|
||||
</configuration>
|
||||
</facet>
|
||||
</component>
|
||||
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
|
||||
<output url="file://$MODULE_DIR$/target/classes" />
|
||||
<output-test url="file://$MODULE_DIR$/target/test-classes" />
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/target" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
<orderEntry type="module" module-name="eladmin-common" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-freemarker:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" />
|
||||
<orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.11.1" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.11.1" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.25" level="project" />
|
||||
<orderEntry type="library" name="Maven: javax.annotation:javax.annotation-api:1.3.2" level="project" />
|
||||
<orderEntry type="library" scope="RUNTIME" name="Maven: org.yaml:snakeyaml:1.23" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.freemarker:freemarker:2.3.28" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-context-support:5.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-beans:5.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: commons-configuration:commons-configuration:1.9" level="project" />
|
||||
<orderEntry type="library" name="Maven: commons-lang:commons-lang:2.6" level="project" />
|
||||
<orderEntry type="library" name="Maven: commons-logging:commons-logging:1.1.1" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-jpa:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-aop:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.aspectj:aspectjweaver:1.9.2" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.zaxxer:HikariCP:3.2.0" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: javax.transaction:javax.transaction-api:1.3" level="project" />
|
||||
<orderEntry type="library" name="Maven: javax.xml.bind:jaxb-api:2.3.1" level="project" />
|
||||
<orderEntry type="library" name="Maven: javax.activation:javax.activation-api:1.2.0" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.hibernate:hibernate-core:5.3.7.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.jboss.logging:jboss-logging:3.3.2.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: javax.persistence:javax.persistence-api:2.2" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.javassist:javassist:3.23.1-GA" level="project" />
|
||||
<orderEntry type="library" name="Maven: net.bytebuddy:byte-buddy:1.9.3" level="project" />
|
||||
<orderEntry type="library" name="Maven: antlr:antlr:2.7.7" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.jboss:jandex:2.0.5.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.dom4j:dom4j:2.1.1" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.hibernate.common:hibernate-commons-annotations:5.0.4.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-jpa:2.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-commons:2.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-orm:5.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-tx:5.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-aspects:5.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.7" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.9.7" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.7" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.7" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.9.7" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.12" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-el:9.0.12" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.12" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.hibernate.validator:hibernate-validator:6.0.13.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: javax.validation:validation-api:2.0.1.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-web:5.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-expression:5.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-starter-test:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test-autoconfigure:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: com.jayway.jsonpath:json-path:2.4.0" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: net.minidev:json-smart:2.3" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: net.minidev:accessors-smart:1.2" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: org.ow2.asm:asm:5.0.4" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: junit:junit:4.12" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: org.assertj:assertj-core:3.11.1" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: org.mockito:mockito-core:2.23.0" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: net.bytebuddy:byte-buddy-agent:1.9.3" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: org.objenesis:objenesis:2.6" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest-core:1.3" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest-library:1.3" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: org.skyscreamer:jsonassert:1.5.0" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: com.vaadin.external.google:android-json:0.0.20131108.vaadin1" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-core:5.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: org.springframework:spring-test:5.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: org.xmlunit:xmlunit-core:2.6.2" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-security:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-aop:5.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.security:spring-security-config:5.1.1.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.security:spring-security-core:5.1.1.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.security:spring-security-web:5.1.1.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-cache:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-context:5.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-redis:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-redis:2.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-keyvalue:2.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-oxm:5.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: redis.clients:jedis:2.9.0" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.apache.commons:commons-pool2:2.5.0" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.8.1" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4.1:1.16" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.springfox:springfox-swagger2:2.9.2" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.swagger:swagger-annotations:1.5.20" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.swagger:swagger-models:1.5.20" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.0" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.springfox:springfox-spi:2.9.2" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.springfox:springfox-core:2.9.2" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.springfox:springfox-schema:2.9.2" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.springfox:springfox-swagger-common:2.9.2" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.springfox:springfox-spring-web:2.9.2" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.google.guava:guava:20.0" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.fasterxml:classmate:1.4.0" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.25" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-core:1.2.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-metadata:1.2.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.mapstruct:mapstruct:1.2.0.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.springfox:springfox-swagger-ui:2.9.2" level="project" />
|
||||
<orderEntry type="library" scope="RUNTIME" name="Maven: mysql:mysql-connector-java:8.0.13" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.alibaba:druid-spring-boot-starter:1.1.10" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.alibaba:druid:1.1.10" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.projectlombok:lombok:1.18.2" level="project" />
|
||||
<orderEntry type="library" name="Maven: cn.hutool:hutool-all:4.4.1" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.alibaba:fastjson:1.2.54" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.mapstruct:mapstruct-jdk8:1.2.0.Final" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: org.mapstruct:mapstruct-processor:1.2.0.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: javax.inject:javax.inject:1" level="project" />
|
||||
</component>
|
||||
</module>
|
|
@ -0,0 +1,38 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<artifactId>eladmin</artifactId>
|
||||
<groupId>me.zhengjie</groupId>
|
||||
<version>1.5</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<artifactId>eladmin-generator</artifactId>
|
||||
|
||||
<properties>
|
||||
<configuration.version>1.9</configuration.version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>me.zhengjie</groupId>
|
||||
<artifactId>eladmin-common</artifactId>
|
||||
<version>1.5</version>
|
||||
</dependency>
|
||||
|
||||
<!--模板引擎-->
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-freemarker</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- https://mvnrepository.com/artifact/commons-configuration/commons-configuration -->
|
||||
<dependency>
|
||||
<groupId>commons-configuration</groupId>
|
||||
<artifactId>commons-configuration</artifactId>
|
||||
<version>${configuration.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
|
@ -0,0 +1,39 @@
|
|||
package me.zhengjie.domain;
|
||||
|
||||
import lombok.Data;
|
||||
import javax.persistence.*;
|
||||
|
||||
/**
|
||||
* 代码生成配置
|
||||
* @author jie
|
||||
* @date 2019-01-03
|
||||
*/
|
||||
@Data
|
||||
@Entity
|
||||
@Table(name = "gen_config")
|
||||
public class GenConfig {
|
||||
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
private Long id;
|
||||
|
||||
/** 包路径 **/
|
||||
private String pack;
|
||||
|
||||
/** 模块名 **/
|
||||
@Column(name = "module_name")
|
||||
private String moduleName;
|
||||
|
||||
/** 前端文件路径 **/
|
||||
private String path;
|
||||
|
||||
/** 前端文件路径 **/
|
||||
@Column(name = "api_path")
|
||||
private String apiPath;
|
||||
|
||||
/** 作者 **/
|
||||
private String author;
|
||||
|
||||
/** 是否覆盖 **/
|
||||
private Boolean cover;
|
||||
}
|
|
@ -0,0 +1,37 @@
|
|||
package me.zhengjie.domain.vo;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* 列的数据信息
|
||||
* @author jie
|
||||
* @date 2019-01-02
|
||||
*/
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class ColumnInfo {
|
||||
|
||||
/** 数据库字段名称 **/
|
||||
private Object columnName;
|
||||
|
||||
/** 允许空值 **/
|
||||
private Object isNullable;
|
||||
|
||||
/** 数据库字段类型 **/
|
||||
private Object columnType;
|
||||
|
||||
/** 数据库字段注释 **/
|
||||
private Object columnComment;
|
||||
|
||||
/** 数据库字段键类型 **/
|
||||
private Object columnKey;
|
||||
|
||||
/** 查询 1:模糊 2:精确 **/
|
||||
private String columnQuery;
|
||||
|
||||
/** 是否在列表显示 **/
|
||||
private String columnShow;
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
package me.zhengjie.domain.vo;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* 表的数据信息
|
||||
* @author jie
|
||||
* @date 2019-01-02
|
||||
*/
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class TableInfo {
|
||||
|
||||
/** 表名称 **/
|
||||
private Object tableName;
|
||||
|
||||
/** 创建日期 **/
|
||||
private Object createTime;
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
package me.zhengjie.repository;
|
||||
|
||||
import me.zhengjie.domain.GenConfig;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
|
||||
/**
|
||||
* @author jie
|
||||
* @date 2019-01-14
|
||||
*/
|
||||
public interface GenConfigRepository extends JpaRepository<GenConfig,Long> {
|
||||
}
|
|
@ -0,0 +1,35 @@
|
|||
package me.zhengjie.rest;
|
||||
|
||||
import me.zhengjie.domain.GenConfig;
|
||||
import me.zhengjie.service.GenConfigService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
/**
|
||||
* @author jie
|
||||
* @date 2019-01-14
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("api")
|
||||
public class GenConfigController {
|
||||
|
||||
@Autowired
|
||||
private GenConfigService genConfigService;
|
||||
|
||||
/**
|
||||
* 查询生成器配置
|
||||
* @return
|
||||
*/
|
||||
@GetMapping(value = "/genConfig")
|
||||
public ResponseEntity get(){
|
||||
return new ResponseEntity(genConfigService.find(), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PutMapping(value = "/genConfig")
|
||||
public ResponseEntity emailConfig(@Validated @RequestBody GenConfig genConfig){
|
||||
return new ResponseEntity(genConfigService.update(genConfig),HttpStatus.OK);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,70 @@
|
|||
package me.zhengjie.rest;
|
||||
|
||||
import cn.hutool.core.util.PageUtil;
|
||||
import me.zhengjie.domain.vo.ColumnInfo;
|
||||
import me.zhengjie.exception.BadRequestException;
|
||||
import me.zhengjie.service.GenConfigService;
|
||||
import me.zhengjie.service.GeneratorService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author jie
|
||||
* @date 2019-01-02
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("api")
|
||||
public class GeneratorController {
|
||||
|
||||
@Autowired
|
||||
private GeneratorService generatorService;
|
||||
|
||||
@Autowired
|
||||
private GenConfigService genConfigService;
|
||||
|
||||
@Value("${generator.enabled}")
|
||||
private Boolean generatorEnabled;
|
||||
|
||||
/**
|
||||
* 查询数据库元数据
|
||||
* @param name
|
||||
* @param page
|
||||
* @param size
|
||||
* @return
|
||||
*/
|
||||
@GetMapping(value = "/generator/tables")
|
||||
public ResponseEntity getTables(@RequestParam(defaultValue = "") String name,
|
||||
@RequestParam(defaultValue = "0")Integer page,
|
||||
@RequestParam(defaultValue = "10")Integer size){
|
||||
int[] startEnd = PageUtil.transToStartEnd(page+1, size);
|
||||
return new ResponseEntity(generatorService.getTables(name,startEnd), HttpStatus.OK);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询表内元数据
|
||||
* @param tableName
|
||||
* @return
|
||||
*/
|
||||
@GetMapping(value = "/generator/columns")
|
||||
public ResponseEntity getTables(@RequestParam String tableName){
|
||||
return new ResponseEntity(generatorService.getColumns(tableName), HttpStatus.OK);
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成代码
|
||||
* @param columnInfos
|
||||
* @return
|
||||
*/
|
||||
@PostMapping(value = "/generator")
|
||||
public ResponseEntity generator(@RequestBody List<ColumnInfo> columnInfos, @RequestParam String tableName){
|
||||
if(!generatorEnabled){
|
||||
throw new BadRequestException("此环境不允许生成代码!");
|
||||
}
|
||||
generatorService.generator(columnInfos,genConfigService.find(),tableName);
|
||||
return new ResponseEntity(HttpStatus.OK);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,28 @@
|
|||
package me.zhengjie.service;
|
||||
|
||||
import me.zhengjie.domain.GenConfig;
|
||||
import org.springframework.cache.annotation.CacheConfig;
|
||||
import org.springframework.cache.annotation.CachePut;
|
||||
import org.springframework.cache.annotation.Cacheable;
|
||||
|
||||
/**
|
||||
* @author jie
|
||||
* @date 2019-01-14
|
||||
*/
|
||||
@CacheConfig(cacheNames = "genConfig")
|
||||
public interface GenConfigService {
|
||||
|
||||
/**
|
||||
* find
|
||||
* @return
|
||||
*/
|
||||
@Cacheable(key = "'1'")
|
||||
GenConfig find();
|
||||
|
||||
/**
|
||||
* update
|
||||
* @param genConfig
|
||||
*/
|
||||
@CachePut(key = "'1'")
|
||||
GenConfig update(GenConfig genConfig);
|
||||
}
|
|
@ -0,0 +1,35 @@
|
|||
package me.zhengjie.service;
|
||||
|
||||
import me.zhengjie.domain.GenConfig;
|
||||
import me.zhengjie.domain.vo.ColumnInfo;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author jie
|
||||
* @date 2019-01-02
|
||||
*/
|
||||
public interface GeneratorService {
|
||||
|
||||
/**
|
||||
* 查询数据库元数据
|
||||
* @param name
|
||||
* @param startEnd
|
||||
* @return
|
||||
*/
|
||||
Object getTables(String name, int[] startEnd);
|
||||
|
||||
/**
|
||||
* 得到数据表的元数据
|
||||
* @param name
|
||||
* @return
|
||||
*/
|
||||
Object getColumns(String name);
|
||||
|
||||
/**
|
||||
* 生成代码
|
||||
* @param columnInfos
|
||||
* @param genConfig
|
||||
* @param tableName
|
||||
*/
|
||||
void generator(List<ColumnInfo> columnInfos, GenConfig genConfig, String tableName);
|
||||
}
|
|
@ -0,0 +1,35 @@
|
|||
package me.zhengjie.service.impl;
|
||||
|
||||
import me.zhengjie.domain.GenConfig;
|
||||
import me.zhengjie.repository.GenConfigRepository;
|
||||
import me.zhengjie.service.GenConfigService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* @author jie
|
||||
* @date 2019-01-14
|
||||
*/
|
||||
@Service
|
||||
public class GenConfigServiceImpl implements GenConfigService {
|
||||
|
||||
@Autowired
|
||||
private GenConfigRepository genConfigRepository;
|
||||
|
||||
@Override
|
||||
public GenConfig find() {
|
||||
Optional<GenConfig> genConfig = genConfigRepository.findById(1L);
|
||||
if(genConfig.isPresent()){
|
||||
return genConfig.get();
|
||||
} else {
|
||||
return new GenConfig();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public GenConfig update(GenConfig genConfig) {
|
||||
genConfig.setId(1L);
|
||||
return genConfigRepository.save(genConfig);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,78 @@
|
|||
package me.zhengjie.service.impl;
|
||||
|
||||
import me.zhengjie.domain.GenConfig;
|
||||
import me.zhengjie.domain.vo.ColumnInfo;
|
||||
import me.zhengjie.domain.vo.TableInfo;
|
||||
import me.zhengjie.exception.BadRequestException;
|
||||
import me.zhengjie.service.GeneratorService;
|
||||
import me.zhengjie.utils.GenUtil;
|
||||
import me.zhengjie.utils.PageUtil;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.ObjectUtils;
|
||||
import javax.persistence.EntityManager;
|
||||
import javax.persistence.PersistenceContext;
|
||||
import javax.persistence.Query;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author jie
|
||||
* @date 2019-01-02
|
||||
*/
|
||||
@Service
|
||||
public class GeneratorServiceImpl implements GeneratorService {
|
||||
|
||||
@PersistenceContext
|
||||
private EntityManager em;
|
||||
|
||||
@Override
|
||||
public Object getTables(String name, int[] startEnd) {
|
||||
StringBuilder sql = new StringBuilder("select table_name tableName,create_time createTime from information_schema.tables where table_schema = (select database()) ");
|
||||
if(!ObjectUtils.isEmpty(name)){
|
||||
sql.append("and table_name like '%"+name+"%' ");
|
||||
}
|
||||
sql.append("order by table_name");
|
||||
Query query = em.createNativeQuery(sql.toString());
|
||||
query.setFirstResult(startEnd[0]);
|
||||
query.setMaxResults(startEnd[1]);
|
||||
|
||||
System.out.println(sql.toString());
|
||||
List<Object[]> result = query.getResultList();
|
||||
List<TableInfo> tableInfos = new ArrayList<>();
|
||||
for (Object[] obj : result) {
|
||||
tableInfos.add(new TableInfo(obj[0],obj[1]));
|
||||
}
|
||||
Query query1 = em.createNativeQuery("SELECT COUNT(*) from information_schema.tables where table_schema = (select database())");
|
||||
Object totalElements = query1.getSingleResult();
|
||||
return PageUtil.toPage(tableInfos,totalElements);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getColumns(String name) {
|
||||
StringBuilder sql = new StringBuilder("select column_name, is_nullable, data_type, column_comment, column_key from information_schema.columns where ");
|
||||
if(!ObjectUtils.isEmpty(name)){
|
||||
sql.append("table_name = '"+name+"' ");
|
||||
}
|
||||
sql.append("and table_schema = (select database()) order by ordinal_position");
|
||||
Query query = em.createNativeQuery(sql.toString());
|
||||
List<Object[]> result = query.getResultList();
|
||||
List<ColumnInfo> columnInfos = new ArrayList<>();
|
||||
for (Object[] obj : result) {
|
||||
columnInfos.add(new ColumnInfo(obj[0],obj[1],obj[2],obj[3],obj[4],null,"true"));
|
||||
}
|
||||
return PageUtil.toPage(columnInfos,columnInfos.size());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void generator(List<ColumnInfo> columnInfos, GenConfig genConfig, String tableName) {
|
||||
if(genConfig.getId() == null){
|
||||
throw new BadRequestException("请先配置生成器");
|
||||
}
|
||||
try {
|
||||
GenUtil.generatorCode(columnInfos,genConfig,tableName);
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,34 @@
|
|||
package me.zhengjie.utils;
|
||||
|
||||
import org.apache.commons.configuration.*;
|
||||
|
||||
/**
|
||||
* sql字段转java
|
||||
*
|
||||
* @author jie
|
||||
* @date 2019-01-03
|
||||
*/
|
||||
public class ColUtil {
|
||||
|
||||
/**
|
||||
* 转换mysql数据类型为java数据类型
|
||||
* @param type
|
||||
* @return
|
||||
*/
|
||||
public static String cloToJava(String type){
|
||||
Configuration config = getConfig();
|
||||
return config.getString(type,"unknowType");
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取配置信息
|
||||
*/
|
||||
public static PropertiesConfiguration getConfig() {
|
||||
try {
|
||||
return new PropertiesConfiguration("generator.properties" );
|
||||
} catch (ConfigurationException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,243 @@
|
|||
package me.zhengjie.utils;
|
||||
|
||||
import cn.hutool.extra.template.*;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import me.zhengjie.domain.GenConfig;
|
||||
import me.zhengjie.domain.vo.ColumnInfo;
|
||||
import org.springframework.util.ObjectUtils;
|
||||
import java.io.File;
|
||||
import java.io.FileWriter;
|
||||
import java.io.IOException;
|
||||
import java.io.Writer;
|
||||
import java.time.LocalDate;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 代码生成
|
||||
* @author jie
|
||||
* @date 2019-01-02
|
||||
*/
|
||||
@Slf4j
|
||||
public class GenUtil {
|
||||
|
||||
private static final String TIMESTAMP = "Timestamp";
|
||||
|
||||
private static final String BIGDECIMAL = "BigDecimal";
|
||||
|
||||
private static final String PK = "PRI";
|
||||
|
||||
/**
|
||||
* 获取后端代码模板名称
|
||||
* @return
|
||||
*/
|
||||
public static List<String> getAdminTemplateNames() {
|
||||
List<String> templateNames = new ArrayList<>();
|
||||
templateNames.add("Entity");
|
||||
templateNames.add("Dto");
|
||||
templateNames.add("Mapper");
|
||||
templateNames.add("Repository");
|
||||
templateNames.add("Service");
|
||||
templateNames.add("ServiceImpl");
|
||||
templateNames.add("QueryService");
|
||||
templateNames.add("Controller");
|
||||
return templateNames;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取前端代码模板名称
|
||||
* @return
|
||||
*/
|
||||
public static List<String> getFrontTemplateNames() {
|
||||
List<String> templateNames = new ArrayList<>();
|
||||
templateNames.add("api");
|
||||
templateNames.add("index");
|
||||
templateNames.add("header");
|
||||
templateNames.add("edit");
|
||||
templateNames.add("eForm");
|
||||
return templateNames;
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成代码
|
||||
* @param columnInfos 表元数据
|
||||
* @param genConfig 生成代码的参数配置,如包路径,作者
|
||||
*/
|
||||
public static void generatorCode(List<ColumnInfo> columnInfos, GenConfig genConfig, String tableName) throws IOException {
|
||||
Map<String,Object> map = new HashMap();
|
||||
map.put("package",genConfig.getPack());
|
||||
map.put("moduleName",genConfig.getModuleName());
|
||||
map.put("author",genConfig.getAuthor());
|
||||
map.put("date", LocalDate.now().toString());
|
||||
map.put("tableName",tableName);
|
||||
String className = StringUtils.toCapitalizeCamelCase(tableName);
|
||||
map.put("className", className);
|
||||
map.put("changeClassName", StringUtils.toCamelCase(tableName));
|
||||
map.put("hasTimestamp",false);
|
||||
map.put("hasBigDecimal",false);
|
||||
map.put("hasQuery",false);
|
||||
|
||||
List<Map<String,Object>> list = new ArrayList<>();
|
||||
for (ColumnInfo column : columnInfos) {
|
||||
Map<String,Object> listMap = new HashMap();
|
||||
listMap.put("columnComment",column.getColumnComment());
|
||||
listMap.put("columnKey",column.getColumnKey());
|
||||
|
||||
String colType = ColUtil.cloToJava(column.getColumnType().toString());
|
||||
if(PK.equals(column.getColumnKey())){
|
||||
map.put("pkColumnType",colType);
|
||||
}
|
||||
if(TIMESTAMP.equals(colType)){
|
||||
map.put("hasTimestamp",true);
|
||||
}
|
||||
if(BIGDECIMAL.equals(colType)){
|
||||
map.put("hasBigDecimal",true);
|
||||
}
|
||||
listMap.put("columnType",colType);
|
||||
listMap.put("columnName",column.getColumnName());
|
||||
listMap.put("isNullable",column.getIsNullable());
|
||||
listMap.put("columnQuery",column.getColumnQuery());
|
||||
|
||||
if(!ObjectUtils.isEmpty(column.getColumnQuery())){
|
||||
map.put("hasQuery",true);
|
||||
}
|
||||
listMap.put("columnShow",column.getColumnShow());
|
||||
listMap.put("changeColumnName",StringUtils.toCamelCase(column.getColumnName().toString()));
|
||||
listMap.put("capitalColumnName",StringUtils.toCapitalizeCamelCase(column.getColumnName().toString()));
|
||||
list.add(listMap);
|
||||
}
|
||||
map.put("columns",list);
|
||||
TemplateEngine engine = TemplateUtil.createEngine(new TemplateConfig("template", TemplateConfig.ResourceMode.CLASSPATH));
|
||||
|
||||
// 生成后端代码
|
||||
List<String> templates = getAdminTemplateNames();
|
||||
for (String templateName : templates) {
|
||||
Template template = engine.getTemplate("generator/admin/"+templateName+".ftl");
|
||||
String filePath = getAdminFilePath(templateName,genConfig,className);
|
||||
|
||||
File file = new File(filePath);
|
||||
|
||||
// 如果非覆盖生成
|
||||
if(!genConfig.getCover()){
|
||||
if(FileUtil.exist(file)){
|
||||
continue;
|
||||
}
|
||||
}
|
||||
// 生成代码
|
||||
genFile(file, template, map);
|
||||
}
|
||||
|
||||
// 生成前端代码
|
||||
templates = getFrontTemplateNames();
|
||||
for (String templateName : templates) {
|
||||
Template template = engine.getTemplate("generator/front/"+templateName+".ftl");
|
||||
String filePath = getFrontFilePath(templateName,genConfig,map.get("changeClassName").toString());
|
||||
|
||||
File file = new File(filePath);
|
||||
|
||||
// 如果非覆盖生成
|
||||
if(!genConfig.getCover()){
|
||||
if(FileUtil.exist(file)){
|
||||
continue;
|
||||
}
|
||||
}
|
||||
// 生成代码
|
||||
genFile(file, template, map);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 定义后端文件路径以及名称
|
||||
*/
|
||||
public static String getAdminFilePath(String templateName, GenConfig genConfig, String className) {
|
||||
String ProjectPath = System.getProperty("user.dir") + File.separator + genConfig.getModuleName();
|
||||
String packagePath = ProjectPath + File.separator + "src" +File.separator+ "main" + File.separator + "java" + File.separator;
|
||||
if (!ObjectUtils.isEmpty(genConfig.getPack())) {
|
||||
packagePath += genConfig.getPack().replace(".", File.separator) + File.separator;
|
||||
}
|
||||
|
||||
if ("Entity".equals(templateName)) {
|
||||
return packagePath + "domain" + File.separator + className + ".java";
|
||||
}
|
||||
|
||||
if ("Controller".equals(templateName)) {
|
||||
return packagePath + "rest" + File.separator + className + "Controller.java";
|
||||
}
|
||||
|
||||
if ("Service".equals(templateName)) {
|
||||
return packagePath + "service" + File.separator + className + "Service.java";
|
||||
}
|
||||
|
||||
if ("ServiceImpl".equals(templateName)) {
|
||||
return packagePath + "service" + File.separator + "impl" + File.separator + className + "ServiceImpl.java";
|
||||
}
|
||||
|
||||
if ("Dto".equals(templateName)) {
|
||||
return packagePath + "service" + File.separator + "dto" + File.separator + className + "DTO.java";
|
||||
}
|
||||
|
||||
if ("Mapper".equals(templateName)) {
|
||||
return packagePath + "service" + File.separator + "mapper" + File.separator + className + "Mapper.java";
|
||||
}
|
||||
|
||||
if ("QueryService".equals(templateName)) {
|
||||
return packagePath + "service" + File.separator + "query" + File.separator + className + "QueryService.java";
|
||||
}
|
||||
|
||||
if ("Repository".equals(templateName)) {
|
||||
return packagePath + "repository" + File.separator + className + "Repository.java";
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 定义前端文件路径以及名称
|
||||
*/
|
||||
public static String getFrontFilePath(String templateName, GenConfig genConfig, String apiName) {
|
||||
String path = genConfig.getPath();
|
||||
|
||||
if ("api".equals(templateName)) {
|
||||
return genConfig.getApiPath() + File.separator + apiName + ".js";
|
||||
}
|
||||
|
||||
if ("index".equals(templateName)) {
|
||||
return path + File.separator + "index.vue";
|
||||
}
|
||||
|
||||
if ("header".equals(templateName)) {
|
||||
return path + File.separator + "module" + File.separator + "header.vue";
|
||||
}
|
||||
|
||||
if ("edit".equals(templateName)) {
|
||||
return path + File.separator + "module" + File.separator + "edit.vue";
|
||||
}
|
||||
|
||||
if ("eForm".equals(templateName)) {
|
||||
return path + File.separator + "module" + File.separator + "form.vue";
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static void genFile(File file,Template template,Map<String,Object> map) throws IOException {
|
||||
// 生成目标文件
|
||||
Writer writer = null;
|
||||
try {
|
||||
FileUtil.touch(file);
|
||||
writer = new FileWriter(file);
|
||||
template.render(map, writer);
|
||||
} catch (TemplateException e) {
|
||||
throw new RuntimeException(e);
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
} finally {
|
||||
writer.close();
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String[] args){
|
||||
System.out.println(FileUtil.exist("E:\\1.5.txt"));
|
||||
}
|
||||
}
|
|
@ -0,0 +1,136 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
|
||||
<component name="FacetManager">
|
||||
<facet type="Spring" name="Spring">
|
||||
<configuration />
|
||||
</facet>
|
||||
<facet type="web" name="Web">
|
||||
<configuration>
|
||||
<webroots />
|
||||
</configuration>
|
||||
</facet>
|
||||
</component>
|
||||
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
|
||||
<output url="file://$MODULE_DIR$/target/classes" />
|
||||
<output-test url="file://$MODULE_DIR$/target/test-classes" />
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/target" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
<orderEntry type="module" module-name="eladmin-common" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-jpa:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-aop:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.aspectj:aspectjweaver:1.9.2" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.zaxxer:HikariCP:3.2.0" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: javax.transaction:javax.transaction-api:1.3" level="project" />
|
||||
<orderEntry type="library" name="Maven: javax.xml.bind:jaxb-api:2.3.1" level="project" />
|
||||
<orderEntry type="library" name="Maven: javax.activation:javax.activation-api:1.2.0" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.hibernate:hibernate-core:5.3.7.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.jboss.logging:jboss-logging:3.3.2.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: javax.persistence:javax.persistence-api:2.2" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.javassist:javassist:3.23.1-GA" level="project" />
|
||||
<orderEntry type="library" name="Maven: net.bytebuddy:byte-buddy:1.9.3" level="project" />
|
||||
<orderEntry type="library" name="Maven: antlr:antlr:2.7.7" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.jboss:jandex:2.0.5.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.dom4j:dom4j:2.1.1" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.hibernate.common:hibernate-commons-annotations:5.0.4.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-jpa:2.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-commons:2.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-orm:5.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-tx:5.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-beans:5.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-aspects:5.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" />
|
||||
<orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.11.1" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.11.1" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.25" level="project" />
|
||||
<orderEntry type="library" name="Maven: javax.annotation:javax.annotation-api:1.3.2" level="project" />
|
||||
<orderEntry type="library" scope="RUNTIME" name="Maven: org.yaml:snakeyaml:1.23" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.7" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.9.7" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.7" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.7" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.9.7" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.12" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-el:9.0.12" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.12" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.hibernate.validator:hibernate-validator:6.0.13.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: javax.validation:validation-api:2.0.1.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-web:5.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-expression:5.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-starter-test:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test-autoconfigure:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: com.jayway.jsonpath:json-path:2.4.0" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: net.minidev:json-smart:2.3" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: net.minidev:accessors-smart:1.2" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: org.ow2.asm:asm:5.0.4" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: junit:junit:4.12" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: org.assertj:assertj-core:3.11.1" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: org.mockito:mockito-core:2.23.0" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: net.bytebuddy:byte-buddy-agent:1.9.3" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: org.objenesis:objenesis:2.6" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest-core:1.3" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest-library:1.3" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: org.skyscreamer:jsonassert:1.5.0" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: com.vaadin.external.google:android-json:0.0.20131108.vaadin1" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-core:5.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: org.springframework:spring-test:5.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: org.xmlunit:xmlunit-core:2.6.2" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-security:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-aop:5.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.security:spring-security-config:5.1.1.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.security:spring-security-core:5.1.1.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.security:spring-security-web:5.1.1.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-cache:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-context:5.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-context-support:5.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-redis:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-redis:2.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-keyvalue:2.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-oxm:5.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: redis.clients:jedis:2.9.0" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.apache.commons:commons-pool2:2.5.0" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.8.1" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4.1:1.16" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.springfox:springfox-swagger2:2.9.2" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.swagger:swagger-annotations:1.5.20" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.swagger:swagger-models:1.5.20" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.0" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.springfox:springfox-spi:2.9.2" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.springfox:springfox-core:2.9.2" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.springfox:springfox-schema:2.9.2" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.springfox:springfox-swagger-common:2.9.2" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.springfox:springfox-spring-web:2.9.2" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.google.guava:guava:20.0" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.fasterxml:classmate:1.4.0" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.25" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-core:1.2.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-metadata:1.2.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.mapstruct:mapstruct:1.2.0.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.springfox:springfox-swagger-ui:2.9.2" level="project" />
|
||||
<orderEntry type="library" scope="RUNTIME" name="Maven: mysql:mysql-connector-java:8.0.13" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.alibaba:druid-spring-boot-starter:1.1.10" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.alibaba:druid:1.1.10" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.projectlombok:lombok:1.18.2" level="project" />
|
||||
<orderEntry type="library" name="Maven: cn.hutool:hutool-all:4.4.1" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.alibaba:fastjson:1.2.54" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.mapstruct:mapstruct-jdk8:1.2.0.Final" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: org.mapstruct:mapstruct-processor:1.2.0.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: javax.inject:javax.inject:1" level="project" />
|
||||
</component>
|
||||
</module>
|
|
@ -0,0 +1,21 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<artifactId>eladmin</artifactId>
|
||||
<groupId>me.zhengjie</groupId>
|
||||
<version>1.5</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<artifactId>eladmin-logging</artifactId>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>me.zhengjie</groupId>
|
||||
<artifactId>eladmin-common</artifactId>
|
||||
<version>1.5</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
|
@ -1,4 +1,4 @@
|
|||
package me.zhengjie.common.aop.log;
|
||||
package me.zhengjie.aop.log;
|
||||
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
|
@ -12,5 +12,5 @@ import java.lang.annotation.Target;
|
|||
@Target(ElementType.METHOD)
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
public @interface Log {
|
||||
String description() default "";
|
||||
String value() default "";
|
||||
}
|
|
@ -1,10 +1,10 @@
|
|||
package me.zhengjie.common.aop.log;
|
||||
package me.zhengjie.aspect;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import me.zhengjie.common.exception.BadRequestException;
|
||||
import me.zhengjie.common.utils.ThrowableUtil;
|
||||
import me.zhengjie.monitor.domain.Logging;
|
||||
import me.zhengjie.monitor.service.LoggingService;
|
||||
import me.zhengjie.domain.Log;
|
||||
import me.zhengjie.exception.BadRequestException;
|
||||
import me.zhengjie.service.LogService;
|
||||
import me.zhengjie.utils.ThrowableUtil;
|
||||
import org.aspectj.lang.JoinPoint;
|
||||
import org.aspectj.lang.ProceedingJoinPoint;
|
||||
import org.aspectj.lang.annotation.AfterThrowing;
|
||||
|
@ -14,9 +14,6 @@ import org.aspectj.lang.annotation.Pointcut;
|
|||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.io.PrintWriter;
|
||||
import java.io.StringWriter;
|
||||
|
||||
/**
|
||||
* @author jie
|
||||
* @date 2018-11-24
|
||||
|
@ -27,14 +24,14 @@ import java.io.StringWriter;
|
|||
public class LogAspect {
|
||||
|
||||
@Autowired
|
||||
private LoggingService loggingService;
|
||||
private LogService logService;
|
||||
|
||||
private long currentTime = 0L;
|
||||
|
||||
/**
|
||||
* 配置切入点
|
||||
*/
|
||||
@Pointcut("@annotation(me.zhengjie.common.aop.log.Log)")
|
||||
@Pointcut("@annotation(me.zhengjie.aop.log.Log)")
|
||||
public void logPointcut() {
|
||||
// 该方法无方法体,主要为了让同类中其他方法使用此切入点
|
||||
}
|
||||
|
@ -53,8 +50,8 @@ public class LogAspect {
|
|||
} catch (Throwable e) {
|
||||
throw new BadRequestException(e.getMessage());
|
||||
}
|
||||
Logging logging = new Logging("INFO",System.currentTimeMillis() - currentTime);
|
||||
loggingService.save(joinPoint, logging);
|
||||
Log log = new Log("INFO",System.currentTimeMillis() - currentTime);
|
||||
logService.save(joinPoint, log);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
@ -66,8 +63,8 @@ public class LogAspect {
|
|||
*/
|
||||
@AfterThrowing(pointcut = "logPointcut()", throwing = "e")
|
||||
public void logAfterThrowing(JoinPoint joinPoint, Throwable e) {
|
||||
Logging logging = new Logging("ERROR",System.currentTimeMillis() - currentTime);
|
||||
logging.setExceptionDetail(ThrowableUtil.getStackTrace(e));
|
||||
loggingService.save((ProceedingJoinPoint)joinPoint, logging);
|
||||
Log log = new Log("ERROR",System.currentTimeMillis() - currentTime);
|
||||
log.setExceptionDetail(ThrowableUtil.getStackTrace(e));
|
||||
logService.save((ProceedingJoinPoint)joinPoint, log);
|
||||
}
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
package me.zhengjie.monitor.domain;
|
||||
package me.zhengjie.domain;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
@ -14,7 +14,7 @@ import java.sql.Timestamp;
|
|||
@Data
|
||||
@Table(name = "log")
|
||||
@NoArgsConstructor
|
||||
public class Logging {
|
||||
public class Log {
|
||||
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
|
@ -44,11 +44,13 @@ public class Logging {
|
|||
/**
|
||||
* 日志类型
|
||||
*/
|
||||
@Column(name = "log_type")
|
||||
private String logType;
|
||||
|
||||
/**
|
||||
* 请求ip
|
||||
*/
|
||||
@Column(name = "request_ip")
|
||||
private String requestIp;
|
||||
|
||||
/**
|
||||
|
@ -59,16 +61,17 @@ public class Logging {
|
|||
/**
|
||||
* 异常详细
|
||||
*/
|
||||
@Column(columnDefinition = "text")
|
||||
@Column(name = "exception_detail", columnDefinition = "text")
|
||||
private String exceptionDetail;
|
||||
|
||||
/**
|
||||
* 创建日期
|
||||
*/
|
||||
@CreationTimestamp
|
||||
@Column(name = "create_time")
|
||||
private Timestamp createTime;
|
||||
|
||||
public Logging(String logType, Long time) {
|
||||
public Log(String logType, Long time) {
|
||||
this.logType = logType;
|
||||
this.time = time;
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
package me.zhengjie.monitor.repository;
|
||||
package me.zhengjie.repository;
|
||||
|
||||
import me.zhengjie.monitor.domain.Logging;
|
||||
import me.zhengjie.domain.Log;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
|
||||
import org.springframework.data.jpa.repository.Query;
|
||||
|
@ -11,7 +11,7 @@ import org.springframework.stereotype.Repository;
|
|||
* @date 2018-11-24
|
||||
*/
|
||||
@Repository
|
||||
public interface LoggingRepository extends JpaRepository<Logging,Long>, JpaSpecificationExecutor {
|
||||
public interface LogRepository extends JpaRepository<Log,Long>, JpaSpecificationExecutor {
|
||||
|
||||
/**
|
||||
* 获取一个时间段的IP记录
|
||||
|
@ -19,6 +19,6 @@ public interface LoggingRepository extends JpaRepository<Logging,Long>, JpaSpeci
|
|||
* @param date2
|
||||
* @return
|
||||
*/
|
||||
@Query(value = "select count(*) FROM (select requestIp FROM log where createTime between ?1 and ?2 GROUP BY requestIp) as s",nativeQuery = true)
|
||||
@Query(value = "select count(*) FROM (select request_ip FROM log where create_time between ?1 and ?2 GROUP BY request_ip) as s",nativeQuery = true)
|
||||
Long findIp(String date1, String date2);
|
||||
}
|
|
@ -0,0 +1,38 @@
|
|||
package me.zhengjie.rest;
|
||||
|
||||
import me.zhengjie.domain.Log;
|
||||
import me.zhengjie.service.query.LogQueryService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* @author jie
|
||||
* @date 2018-11-24
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("api")
|
||||
public class LogController {
|
||||
|
||||
@Autowired
|
||||
private LogQueryService logQueryService;
|
||||
|
||||
@GetMapping(value = "/logs")
|
||||
@PreAuthorize("hasAnyRole('ADMIN')")
|
||||
public ResponseEntity getLogs(Log log, Pageable pageable){
|
||||
log.setLogType("INFO");
|
||||
return new ResponseEntity(logQueryService.queryAll(log,pageable), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@GetMapping(value = "/logs/error")
|
||||
@PreAuthorize("hasAnyRole('ADMIN')")
|
||||
public ResponseEntity getErrorLogs(Log log, Pageable pageable){
|
||||
log.setLogType("ERROR");
|
||||
return new ResponseEntity(logQueryService.queryAll(log,pageable), HttpStatus.OK);
|
||||
}
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
package me.zhengjie.monitor.service;
|
||||
package me.zhengjie.service;
|
||||
|
||||
import me.zhengjie.monitor.domain.Logging;
|
||||
import me.zhengjie.domain.Log;
|
||||
import org.aspectj.lang.ProceedingJoinPoint;
|
||||
import org.springframework.scheduling.annotation.Async;
|
||||
|
||||
|
@ -8,13 +8,13 @@ import org.springframework.scheduling.annotation.Async;
|
|||
* @author jie
|
||||
* @date 2018-11-24
|
||||
*/
|
||||
public interface LoggingService {
|
||||
public interface LogService {
|
||||
|
||||
/**
|
||||
* 新增日志
|
||||
* @param joinPoint
|
||||
* @param logging
|
||||
* @param log
|
||||
*/
|
||||
@Async
|
||||
void save(ProceedingJoinPoint joinPoint, Logging logging);
|
||||
void save(ProceedingJoinPoint joinPoint, Log log);
|
||||
}
|
|
@ -1,19 +1,16 @@
|
|||
package me.zhengjie.monitor.service.impl;
|
||||
package me.zhengjie.service.impl;
|
||||
|
||||
import cn.hutool.json.JSONObject;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import me.zhengjie.common.utils.IpUtil;
|
||||
import me.zhengjie.common.utils.RequestHolder;
|
||||
import me.zhengjie.core.security.AuthorizationUser;
|
||||
import me.zhengjie.core.utils.JwtTokenUtil;
|
||||
import me.zhengjie.monitor.domain.Logging;
|
||||
import me.zhengjie.monitor.repository.LoggingRepository;
|
||||
import me.zhengjie.monitor.service.LoggingService;
|
||||
import me.zhengjie.domain.Log;
|
||||
import me.zhengjie.repository.LogRepository;
|
||||
import me.zhengjie.service.LogService;
|
||||
import me.zhengjie.utils.RequestHolder;
|
||||
import me.zhengjie.utils.SecurityContextHolder;
|
||||
import me.zhengjie.utils.StringUtils;
|
||||
import org.aspectj.lang.ProceedingJoinPoint;
|
||||
import org.aspectj.lang.reflect.MethodSignature;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.security.core.context.SecurityContextHolder;
|
||||
import org.springframework.security.core.userdetails.UserDetails;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Propagation;
|
||||
|
@ -27,32 +24,29 @@ import java.lang.reflect.Method;
|
|||
*/
|
||||
@Service
|
||||
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
|
||||
public class LoggingServiceImpl implements LoggingService {
|
||||
public class LogServiceImpl implements LogService {
|
||||
|
||||
@Autowired
|
||||
private LoggingRepository loggingRepository;
|
||||
private LogRepository logRepository;
|
||||
|
||||
@Value("${jwt.header}")
|
||||
private String tokenHeader;
|
||||
|
||||
@Autowired
|
||||
private JwtTokenUtil jwtTokenUtil;
|
||||
|
||||
private final String LOGINPATH = "authenticationLogin";
|
||||
private final String LOGINPATH = "login";
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void save(ProceedingJoinPoint joinPoint, Logging logging){
|
||||
public void save(ProceedingJoinPoint joinPoint, Log log){
|
||||
|
||||
// 获取request
|
||||
HttpServletRequest request = RequestHolder.getHttpServletRequest();
|
||||
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
|
||||
Method method = signature.getMethod();
|
||||
me.zhengjie.common.aop.log.Log log = method.getAnnotation(me.zhengjie.common.aop.log.Log.class);
|
||||
me.zhengjie.aop.log.Log aopLog = method.getAnnotation(me.zhengjie.aop.log.Log.class);
|
||||
|
||||
// 描述
|
||||
if (log != null) {
|
||||
logging.setDescription(log.description());
|
||||
log.setDescription(aopLog.value());
|
||||
}
|
||||
|
||||
// 方法路径
|
||||
|
@ -73,19 +67,22 @@ public class LoggingServiceImpl implements LoggingService {
|
|||
}
|
||||
|
||||
// 获取IP地址
|
||||
logging.setRequestIp(IpUtil.getIP(request));
|
||||
log.setRequestIp(StringUtils.getIP(request));
|
||||
|
||||
if(!LOGINPATH.equals(signature.getName())){
|
||||
UserDetails userDetails = (UserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
|
||||
UserDetails userDetails = SecurityContextHolder.getUserDetails();
|
||||
username = userDetails.getUsername();
|
||||
} else {
|
||||
AuthorizationUser user = JSONUtil.toBean(new JSONObject(argValues[0]),AuthorizationUser.class);
|
||||
username = user.getUsername();
|
||||
|
||||
try {
|
||||
JSONObject jsonObject = new JSONObject(argValues[0]);
|
||||
username = jsonObject.get("username").toString();
|
||||
}catch (Exception e){
|
||||
e.printStackTrace();
|
||||
}
|
||||
logging.setMethod(methodName);
|
||||
logging.setUsername(username);
|
||||
logging.setParams(params + " }");
|
||||
loggingRepository.save(logging);
|
||||
}
|
||||
log.setMethod(methodName);
|
||||
log.setUsername(username);
|
||||
log.setParams(params + " }");
|
||||
logRepository.save(log);
|
||||
}
|
||||
}
|
|
@ -1,7 +1,7 @@
|
|||
package me.zhengjie.monitor.service.query;
|
||||
package me.zhengjie.service.query;
|
||||
|
||||
import me.zhengjie.monitor.domain.Logging;
|
||||
import me.zhengjie.monitor.repository.LoggingRepository;
|
||||
import me.zhengjie.domain.Log;
|
||||
import me.zhengjie.repository.LogRepository;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
|
@ -23,41 +23,35 @@ import java.util.List;
|
|||
*/
|
||||
@Service
|
||||
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
|
||||
public class LoggingQueryService {
|
||||
public class LogQueryService {
|
||||
|
||||
@Autowired
|
||||
private LoggingRepository loggingRepository;
|
||||
private LogRepository logRepository;
|
||||
|
||||
public Page queryAll(Logging logging, Pageable pageable){
|
||||
|
||||
return loggingRepository.findAll(new Spec(logging),pageable);
|
||||
public Page queryAll(Log log, Pageable pageable){
|
||||
return logRepository.findAll(new Spec(log),pageable);
|
||||
}
|
||||
|
||||
public List queryAll(Logging logging){
|
||||
class Spec implements Specification<Log> {
|
||||
|
||||
return loggingRepository.findAll(new Spec(logging));
|
||||
}
|
||||
private Log log;
|
||||
|
||||
class Spec implements Specification<Logging> {
|
||||
|
||||
private Logging logging;
|
||||
|
||||
public Spec(Logging logging){
|
||||
this.logging = logging;
|
||||
public Spec(Log log){
|
||||
this.log = log;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Predicate toPredicate(Root<Logging> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder cb) {
|
||||
public Predicate toPredicate(Root<Log> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder cb) {
|
||||
|
||||
List<Predicate> list = new ArrayList<Predicate>();
|
||||
|
||||
|
||||
if(!ObjectUtils.isEmpty(logging.getUsername())){
|
||||
list.add(cb.like(root.get("username").as(String.class),"%"+logging.getUsername()+"%"));
|
||||
if(!ObjectUtils.isEmpty(log.getUsername())){
|
||||
list.add(cb.like(root.get("username").as(String.class),"%"+log.getUsername()+"%"));
|
||||
}
|
||||
|
||||
if (!ObjectUtils.isEmpty(logging.getLogType())) {
|
||||
list.add(cb.equal(root.get("logType").as(String.class), logging.getLogType()));
|
||||
if (!ObjectUtils.isEmpty(log.getLogType())) {
|
||||
list.add(cb.equal(root.get("logType").as(String.class), log.getLogType()));
|
||||
}
|
||||
|
||||
Predicate[] p = new Predicate[list.size()];
|
|
@ -0,0 +1,165 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
|
||||
<component name="FacetManager">
|
||||
<facet type="Spring" name="Spring">
|
||||
<configuration />
|
||||
</facet>
|
||||
<facet type="web" name="Web">
|
||||
<configuration>
|
||||
<webroots />
|
||||
<sourceRoots>
|
||||
<root url="file://$MODULE_DIR$/src/main/java" />
|
||||
<root url="file://$MODULE_DIR$/src/main/resources" />
|
||||
<root url="file://$MODULE_DIR$/target/generated-sources/annotations" />
|
||||
</sourceRoots>
|
||||
</configuration>
|
||||
</facet>
|
||||
</component>
|
||||
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
|
||||
<output url="file://$MODULE_DIR$/target/classes" />
|
||||
<output-test url="file://$MODULE_DIR$/target/test-classes" />
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/target/generated-sources/annotations" isTestSource="false" generated="true" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/target" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
<orderEntry type="module" module-name="eladmin-generator" />
|
||||
<orderEntry type="module" module-name="eladmin-common" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-freemarker:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.freemarker:freemarker:2.3.28" level="project" />
|
||||
<orderEntry type="library" name="Maven: commons-configuration:commons-configuration:1.9" level="project" />
|
||||
<orderEntry type="library" name="Maven: commons-lang:commons-lang:2.6" level="project" />
|
||||
<orderEntry type="library" name="Maven: commons-logging:commons-logging:1.1.1" level="project" />
|
||||
<orderEntry type="module" module-name="eladmin-tools" />
|
||||
<orderEntry type="module" module-name="eladmin-logging" />
|
||||
<orderEntry type="library" name="Maven: javax.mail:mail:1.4.7" level="project" />
|
||||
<orderEntry type="library" name="Maven: javax.activation:activation:1.1" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.qiniu:qiniu-java-sdk:7.2.18" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.squareup.okhttp3:okhttp:3.11.0" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.squareup.okio:okio:1.14.0" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.5" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.alipay.sdk:alipay-sdk-java:3.1.0" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.jsonwebtoken:jjwt:0.9.1" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.7" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.0" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.9.7" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-websocket:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-messaging:5.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-beans:5.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-websocket:5.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.quartz-scheduler:quartz:2.3.0" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.mchange:mchange-commons-java:0.2.11" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.25" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-jpa:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-aop:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.aspectj:aspectjweaver:1.9.2" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.zaxxer:HikariCP:3.2.0" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: javax.transaction:javax.transaction-api:1.3" level="project" />
|
||||
<orderEntry type="library" name="Maven: javax.xml.bind:jaxb-api:2.3.1" level="project" />
|
||||
<orderEntry type="library" name="Maven: javax.activation:javax.activation-api:1.2.0" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.hibernate:hibernate-core:5.3.7.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.jboss.logging:jboss-logging:3.3.2.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: javax.persistence:javax.persistence-api:2.2" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.javassist:javassist:3.23.1-GA" level="project" />
|
||||
<orderEntry type="library" name="Maven: net.bytebuddy:byte-buddy:1.9.3" level="project" />
|
||||
<orderEntry type="library" name="Maven: antlr:antlr:2.7.7" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.jboss:jandex:2.0.5.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.dom4j:dom4j:2.1.1" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.hibernate.common:hibernate-commons-annotations:5.0.4.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-jpa:2.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-commons:2.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-orm:5.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-tx:5.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-aspects:5.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" />
|
||||
<orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.11.1" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.11.1" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.25" level="project" />
|
||||
<orderEntry type="library" name="Maven: javax.annotation:javax.annotation-api:1.3.2" level="project" />
|
||||
<orderEntry type="library" scope="RUNTIME" name="Maven: org.yaml:snakeyaml:1.23" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.7" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.7" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.9.7" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.12" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-el:9.0.12" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.12" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.hibernate.validator:hibernate-validator:6.0.13.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: javax.validation:validation-api:2.0.1.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-web:5.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-expression:5.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-starter-test:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test-autoconfigure:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: com.jayway.jsonpath:json-path:2.4.0" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: net.minidev:json-smart:2.3" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: net.minidev:accessors-smart:1.2" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: org.ow2.asm:asm:5.0.4" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: junit:junit:4.12" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: org.assertj:assertj-core:3.11.1" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: org.mockito:mockito-core:2.23.0" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: net.bytebuddy:byte-buddy-agent:1.9.3" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: org.objenesis:objenesis:2.6" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest-core:1.3" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest-library:1.3" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: org.skyscreamer:jsonassert:1.5.0" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: com.vaadin.external.google:android-json:0.0.20131108.vaadin1" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-core:5.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: org.springframework:spring-test:5.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: org.xmlunit:xmlunit-core:2.6.2" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-security:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-aop:5.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.security:spring-security-config:5.1.1.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.security:spring-security-core:5.1.1.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.security:spring-security-web:5.1.1.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-cache:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-context:5.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-context-support:5.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-redis:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-redis:2.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-keyvalue:2.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-oxm:5.1.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: redis.clients:jedis:2.9.0" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.apache.commons:commons-pool2:2.5.0" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.8.1" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4.1:1.16" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.springfox:springfox-swagger2:2.9.2" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.swagger:swagger-annotations:1.5.20" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.swagger:swagger-models:1.5.20" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.springfox:springfox-spi:2.9.2" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.springfox:springfox-core:2.9.2" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.springfox:springfox-schema:2.9.2" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.springfox:springfox-swagger-common:2.9.2" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.springfox:springfox-spring-web:2.9.2" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.google.guava:guava:20.0" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.fasterxml:classmate:1.4.0" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-core:1.2.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-metadata:1.2.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.mapstruct:mapstruct:1.2.0.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.springfox:springfox-swagger-ui:2.9.2" level="project" />
|
||||
<orderEntry type="library" scope="RUNTIME" name="Maven: mysql:mysql-connector-java:8.0.13" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.alibaba:druid-spring-boot-starter:1.1.10" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.alibaba:druid:1.1.10" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.projectlombok:lombok:1.18.2" level="project" />
|
||||
<orderEntry type="library" name="Maven: cn.hutool:hutool-all:4.4.1" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.alibaba:fastjson:1.2.54" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.mapstruct:mapstruct-jdk8:1.2.0.Final" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: org.mapstruct:mapstruct-processor:1.2.0.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: javax.inject:javax.inject:1" level="project" />
|
||||
</component>
|
||||
</module>
|
|
@ -0,0 +1,68 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<artifactId>eladmin</artifactId>
|
||||
<groupId>me.zhengjie</groupId>
|
||||
<version>1.5</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<artifactId>eladmin-system</artifactId>
|
||||
|
||||
<properties>
|
||||
<jjwt.version>0.9.1</jjwt.version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
|
||||
<dependency>
|
||||
<groupId>me.zhengjie</groupId>
|
||||
<artifactId>eladmin-generator</artifactId>
|
||||
<version>1.5</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>me.zhengjie</groupId>
|
||||
<artifactId>eladmin-tools</artifactId>
|
||||
<version>1.5</version>
|
||||
</dependency>
|
||||
|
||||
<!--jwt-->
|
||||
<dependency>
|
||||
<groupId>io.jsonwebtoken</groupId>
|
||||
<artifactId>jjwt</artifactId>
|
||||
<version>${jjwt.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!--websocket-->
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-websocket</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- quartz -->
|
||||
<dependency>
|
||||
<groupId>org.quartz-scheduler</groupId>
|
||||
<artifactId>quartz</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||
</plugin>
|
||||
<!-- 跳过单元测试 -->
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-surefire-plugin</artifactId>
|
||||
<configuration>
|
||||
<skipTests>true</skipTests>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
|
@ -11,7 +11,7 @@
|
|||
Target Server Version : 50559
|
||||
File Encoding : 65001
|
||||
|
||||
Date: 08/01/2019 16:17:02
|
||||
Date: 20/01/2019 19:17:08
|
||||
*/
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
|
@ -23,16 +23,16 @@ SET FOREIGN_KEY_CHECKS = 0;
|
|||
DROP TABLE IF EXISTS `alipay_config`;
|
||||
CREATE TABLE `alipay_config` (
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`appID` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`charset` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`app_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '应用ID',
|
||||
`charset` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '编码',
|
||||
`format` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '类型 固定格式json',
|
||||
`gatewayUrl` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`notifyUrl` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`privateKey` varchar(2000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`publicKey` varchar(2000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`returnUrl` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`signType` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`sysServiceProviderId` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`gateway_url` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '网关地址',
|
||||
`notify_url` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '异步回调',
|
||||
`private_key` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '私钥',
|
||||
`public_key` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '公钥',
|
||||
`return_url` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '回调地址',
|
||||
`sign_type` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '签名方式',
|
||||
`sys_service_provider_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '商户号',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
|
||||
|
||||
|
@ -46,86 +46,108 @@ INSERT INTO `alipay_config` VALUES (1, '2016091700532697', 'utf-8', 'JSON', 'htt
|
|||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `email_config`;
|
||||
CREATE TABLE `email_config` (
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||
`fromUser` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`host` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`pass` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`port` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`user` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
|
||||
`from_user` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '收件人',
|
||||
`host` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '邮件服务器SMTP地址',
|
||||
`pass` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '密码',
|
||||
`port` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '端口',
|
||||
`user` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '发件者用户名',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for gen_config
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `gen_config`;
|
||||
CREATE TABLE `gen_config` (
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
|
||||
`author` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '作者',
|
||||
`cover` bit(1) NULL DEFAULT NULL COMMENT '是否覆盖',
|
||||
`module_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '模块名称',
|
||||
`pack` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '至于哪个包下',
|
||||
`path` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '前端代码生成的路径',
|
||||
`api_path` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
|
||||
|
||||
-- ----------------------------
|
||||
-- Records of gen_config
|
||||
-- ----------------------------
|
||||
INSERT INTO `gen_config` VALUES (1, 'jie', b'0', 'eladmin-system', 'me.zhengjie.modules.test', 'E:\\workspace\\my-workspace\\eladmin-qt\\src\\views\\system\\test', 'E:\\workspace\\my-workspace\\eladmin-qt\\src\\api');
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for log
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `log`;
|
||||
CREATE TABLE `log` (
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||
`createTime` datetime NULL DEFAULT NULL,
|
||||
`description` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`exceptionDetail` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL,
|
||||
`logType` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`method` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`params` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL,
|
||||
`requestIp` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`time` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`username` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
|
||||
`create_time` datetime NULL DEFAULT NULL COMMENT '创建日期',
|
||||
`description` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '描述',
|
||||
`exception_detail` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '异常详情',
|
||||
`log_type` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '日志类型',
|
||||
`method` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '方法名称',
|
||||
`params` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '参数',
|
||||
`request_ip` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '请求ip',
|
||||
`time` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '耗时',
|
||||
`username` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '操作用户',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 5066 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 6327 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for menu
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `menu`;
|
||||
CREATE TABLE `menu` (
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||
`createTime` datetime NULL DEFAULT NULL,
|
||||
`iFrame` bit(1) NULL DEFAULT NULL,
|
||||
`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`component` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`pid` bigint(20) NOT NULL,
|
||||
`sort` bigint(20) NOT NULL,
|
||||
`icon` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`path` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
|
||||
`create_time` datetime NULL DEFAULT NULL COMMENT '创建日期',
|
||||
`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '菜单名称',
|
||||
`component` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '组件',
|
||||
`pid` bigint(20) NOT NULL COMMENT '上级菜单ID',
|
||||
`sort` bigint(20) NOT NULL COMMENT '排序',
|
||||
`icon` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '图标',
|
||||
`path` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '链接地址',
|
||||
`i_frame` bit(1) NULL DEFAULT NULL COMMENT '是否外链',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 29 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 36 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
|
||||
|
||||
-- ----------------------------
|
||||
-- Records of menu
|
||||
-- ----------------------------
|
||||
INSERT INTO `menu` VALUES (1, '2018-12-18 15:11:29', b'0', '系统管理', NULL, 0, 1, 'system', 'system');
|
||||
INSERT INTO `menu` VALUES (2, '2018-12-18 15:14:44', b'0', '用户管理', 'system/user/index', 1, 2, 'peoples', 'user');
|
||||
INSERT INTO `menu` VALUES (3, '2018-12-18 15:16:07', b'0', '角色管理', 'system/role/index', 1, 3, 'role', 'role');
|
||||
INSERT INTO `menu` VALUES (4, '2018-12-18 15:16:45', b'0', '权限管理', 'system/permission/index', 1, 4, 'permission', 'permission');
|
||||
INSERT INTO `menu` VALUES (5, '2018-12-18 15:17:28', b'0', '菜单管理', 'system/menu/index', 1, 5, 'menu', 'menu');
|
||||
INSERT INTO `menu` VALUES (6, '2018-12-18 15:17:48', b'0', '系统监控', NULL, 0, 10, 'monitor', 'monitor');
|
||||
INSERT INTO `menu` VALUES (7, '2018-12-18 15:18:26', b'0', '系统日志', 'monitor/log/index', 6, 11, 'log', 'logs');
|
||||
INSERT INTO `menu` VALUES (8, '2018-12-18 15:19:01', b'0', '系统缓存', 'monitor/redis/index', 6, 12, 'redis', 'redis');
|
||||
INSERT INTO `menu` VALUES (9, '2018-12-18 15:19:34', b'1', 'SQL监控', NULL, 6, 14, 'sqlMonitor', 'http://localhost:8000/druid');
|
||||
INSERT INTO `menu` VALUES (10, '2018-12-19 13:38:16', b'0', '组件管理', NULL, 0, 50, 'zujian', 'components');
|
||||
INSERT INTO `menu` VALUES (11, '2018-12-19 13:38:49', b'0', '图标库', 'components/IconSelect', 10, 51, 'icon', 'icon');
|
||||
INSERT INTO `menu` VALUES (12, '2018-12-24 20:37:35', b'0', '实时控制台', 'monitor/log/msg', 6, 13, 'codeConsole', 'msg');
|
||||
INSERT INTO `menu` VALUES (13, '2018-12-27 10:11:26', b'0', '三方工具', '', 0, 30, 'tools', 'tools');
|
||||
INSERT INTO `menu` VALUES (14, '2018-12-27 10:13:09', b'0', '邮件工具', 'tools/email/index', 13, 31, 'email', 'email');
|
||||
INSERT INTO `menu` VALUES (15, '2018-12-27 11:58:25', b'0', '富文本', 'components/Editor', 10, 52, 'fwb', 'tinymce');
|
||||
INSERT INTO `menu` VALUES (16, '2018-12-28 09:36:53', b'0', 'SM.MS图床', 'tools/picture/index', 13, 32, 'image', 'pictures');
|
||||
INSERT INTO `menu` VALUES (17, '2018-12-28 15:09:49', b'1', '项目地址', '', 0, 0, 'github', 'https://github.com/elunez/eladmin');
|
||||
INSERT INTO `menu` VALUES (18, '2018-12-31 11:12:15', b'0', '七牛云存储', 'tools/qiniu/index', 13, 33, 'qiniu', 'qiniu');
|
||||
INSERT INTO `menu` VALUES (19, '2018-12-31 14:52:38', b'0', '支付宝工具', 'tools/aliPay/index', 13, 34, 'alipay', 'aliPay');
|
||||
INSERT INTO `menu` VALUES (21, '2019-01-04 16:22:03', b'0', '多级菜单', '', 0, 900, 'menu', 'nested');
|
||||
INSERT INTO `menu` VALUES (22, '2019-01-04 16:23:29', b'0', '二级菜单1', 'nested/menu1/index', 21, 999, 'menu', 'menu1');
|
||||
INSERT INTO `menu` VALUES (23, '2019-01-04 16:23:57', b'0', '二级菜单2', 'nested/menu2/index', 21, 999, 'menu', 'menu2');
|
||||
INSERT INTO `menu` VALUES (24, '2019-01-04 16:24:48', b'0', '三级菜单1', 'nested/menu1/menu1-1', 22, 999, 'menu', 'menu1-1');
|
||||
INSERT INTO `menu` VALUES (27, '2019-01-07 17:27:32', b'0', '三级菜单2', 'nested/menu1/menu1-2', 22, 999, 'menu', 'menu1-2');
|
||||
INSERT INTO `menu` VALUES (28, '2019-01-07 20:34:40', b'0', '定时任务', 'system/timing/index', 1, 6, 'timing', 'timing');
|
||||
INSERT INTO `menu` VALUES (1, '2018-12-18 15:11:29', '系统管理', NULL, 0, 1, 'system', 'system', b'0');
|
||||
INSERT INTO `menu` VALUES (2, '2018-12-18 15:14:44', '用户管理', 'system/user/index', 1, 2, 'peoples', 'user', b'0');
|
||||
INSERT INTO `menu` VALUES (3, '2018-12-18 15:16:07', '角色管理', 'system/role/index', 1, 3, 'role', 'role', b'0');
|
||||
INSERT INTO `menu` VALUES (4, '2018-12-18 15:16:45', '权限管理', 'system/permission/index', 1, 4, 'permission', 'permission', b'0');
|
||||
INSERT INTO `menu` VALUES (5, '2018-12-18 15:17:28', '菜单管理', 'system/menu/index', 1, 5, 'menu', 'menu', b'0');
|
||||
INSERT INTO `menu` VALUES (6, '2018-12-18 15:17:48', '系统监控', NULL, 0, 10, 'monitor', 'monitor', b'0');
|
||||
INSERT INTO `menu` VALUES (7, '2018-12-18 15:18:26', '操作日志', 'monitor/log/index', 6, 11, 'log', 'logs', b'0');
|
||||
INSERT INTO `menu` VALUES (8, '2018-12-18 15:19:01', '系统缓存', 'monitor/redis/index', 6, 13, 'redis', 'redis', b'0');
|
||||
INSERT INTO `menu` VALUES (9, '2018-12-18 15:19:34', 'SQL监控', NULL, 6, 14, 'sqlMonitor', 'http://localhost:8000/druid', b'1');
|
||||
INSERT INTO `menu` VALUES (10, '2018-12-19 13:38:16', '组件管理', NULL, 0, 50, 'zujian', 'components', b'0');
|
||||
INSERT INTO `menu` VALUES (11, '2018-12-19 13:38:49', '图标库', 'components/IconSelect', 10, 51, 'icon', 'icon', b'0');
|
||||
INSERT INTO `menu` VALUES (12, '2018-12-24 20:37:35', '实时控制台', 'monitor/log/msg', 6, 15, 'codeConsole', 'msg', b'0');
|
||||
INSERT INTO `menu` VALUES (13, '2018-12-27 10:11:26', '三方工具', '', 0, 30, 'tools', 'tools', b'0');
|
||||
INSERT INTO `menu` VALUES (14, '2018-12-27 10:13:09', '邮件工具', 'tools/email/index', 13, 31, 'email', 'email', b'0');
|
||||
INSERT INTO `menu` VALUES (15, '2018-12-27 11:58:25', '富文本', 'components/Editor', 10, 52, 'fwb', 'tinymce', b'0');
|
||||
INSERT INTO `menu` VALUES (16, '2018-12-28 09:36:53', 'SM.MS图床', 'tools/picture/index', 13, 32, 'image', 'pictures', b'0');
|
||||
INSERT INTO `menu` VALUES (17, '2018-12-28 15:09:49', '项目地址', '', 0, 0, 'github', 'https://github.com/elunez/eladmin', b'1');
|
||||
INSERT INTO `menu` VALUES (18, '2018-12-31 11:12:15', '七牛云存储', 'tools/qiniu/index', 13, 33, 'qiniu', 'qiniu', b'0');
|
||||
INSERT INTO `menu` VALUES (19, '2018-12-31 14:52:38', '支付宝工具', 'tools/aliPay/index', 13, 34, 'alipay', 'aliPay', b'0');
|
||||
INSERT INTO `menu` VALUES (21, '2019-01-04 16:22:03', '多级菜单', '', 0, 900, 'menu', 'nested', b'0');
|
||||
INSERT INTO `menu` VALUES (22, '2019-01-04 16:23:29', '二级菜单1', 'nested/menu1/index', 21, 999, 'menu', 'menu1', b'0');
|
||||
INSERT INTO `menu` VALUES (23, '2019-01-04 16:23:57', '二级菜单2', 'nested/menu2/index', 21, 999, 'menu', 'menu2', b'0');
|
||||
INSERT INTO `menu` VALUES (24, '2019-01-04 16:24:48', '三级菜单1', 'nested/menu1/menu1-1', 22, 999, 'menu', 'menu1-1', b'0');
|
||||
INSERT INTO `menu` VALUES (27, '2019-01-07 17:27:32', '三级菜单2', 'nested/menu1/menu1-2', 22, 999, 'menu', 'menu1-2', b'0');
|
||||
INSERT INTO `menu` VALUES (28, '2019-01-07 20:34:40', '定时任务', 'system/timing/index', 1, 6, 'timing', 'timing', b'0');
|
||||
INSERT INTO `menu` VALUES (30, '2019-01-11 15:45:55', '代码生成', 'generator/index', 1, 8, 'dev', 'generator', b'0');
|
||||
INSERT INTO `menu` VALUES (32, '2019-01-13 13:49:03', '异常日志', 'monitor/log/errorLog', 6, 12, 'error', 'errorLog', b'0');
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for menus_roles
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `menus_roles`;
|
||||
CREATE TABLE `menus_roles` (
|
||||
`menu_id` bigint(20) NOT NULL,
|
||||
`role_id` bigint(20) NOT NULL,
|
||||
`menu_id` bigint(20) NOT NULL COMMENT '菜单ID',
|
||||
`role_id` bigint(20) NOT NULL COMMENT '角色ID',
|
||||
PRIMARY KEY (`menu_id`, `role_id`) USING BTREE,
|
||||
INDEX `FKcngg2qadojhi3a651a5adkvbq`(`role_id`) USING BTREE,
|
||||
CONSTRAINT `FKcngg2qadojhi3a651a5adkvbq` FOREIGN KEY (`role_id`) REFERENCES `role` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
|
||||
|
@ -160,6 +182,8 @@ INSERT INTO `menus_roles` VALUES (23, 1);
|
|||
INSERT INTO `menus_roles` VALUES (24, 1);
|
||||
INSERT INTO `menus_roles` VALUES (27, 1);
|
||||
INSERT INTO `menus_roles` VALUES (28, 1);
|
||||
INSERT INTO `menus_roles` VALUES (30, 1);
|
||||
INSERT INTO `menus_roles` VALUES (32, 1);
|
||||
INSERT INTO `menus_roles` VALUES (1, 2);
|
||||
INSERT INTO `menus_roles` VALUES (2, 2);
|
||||
INSERT INTO `menus_roles` VALUES (3, 2);
|
||||
|
@ -181,16 +205,27 @@ INSERT INTO `menus_roles` VALUES (24, 2);
|
|||
INSERT INTO `menus_roles` VALUES (27, 2);
|
||||
INSERT INTO `menus_roles` VALUES (28, 2);
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for my_test
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `my_test`;
|
||||
CREATE TABLE `my_test` (
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
|
||||
`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '名称',
|
||||
`remark` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for permission
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `permission`;
|
||||
CREATE TABLE `permission` (
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||
`alias` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`createTime` datetime NULL DEFAULT NULL,
|
||||
`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`pid` int(11) NOT NULL,
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
|
||||
`alias` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '别名',
|
||||
`create_time` datetime NULL DEFAULT NULL COMMENT '创建日期',
|
||||
`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '名称',
|
||||
`pid` int(11) NOT NULL COMMENT '上级权限',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 40 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
|
||||
|
||||
|
@ -238,30 +273,30 @@ INSERT INTO `permission` VALUES (39, '任务删除', '2019-01-08 15:01:13', 'JOB
|
|||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `picture`;
|
||||
CREATE TABLE `picture` (
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||
`createTime` datetime NULL DEFAULT NULL,
|
||||
`delete_url` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`filename` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`height` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`size` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`url` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`username` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`width` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
|
||||
`create_time` datetime NULL DEFAULT NULL COMMENT '上传日期',
|
||||
`delete_url` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '删除的URL',
|
||||
`filename` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '图片名称',
|
||||
`height` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '图片高度',
|
||||
`size` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '图片大小',
|
||||
`url` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '图片地址',
|
||||
`username` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用户名称',
|
||||
`width` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '图片宽度',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 48 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 54 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for qiniu_config
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `qiniu_config`;
|
||||
CREATE TABLE `qiniu_config` (
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||
`accessKey` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`bucket` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`host` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`secretKey` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`type` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`zone` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
|
||||
`access_key` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT 'accessKey',
|
||||
`bucket` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'Bucket 识别符',
|
||||
`host` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '外链域名',
|
||||
`secret_key` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT 'secretKey',
|
||||
`type` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '空间类型',
|
||||
`zone` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '机房',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
|
||||
|
||||
|
@ -270,30 +305,30 @@ CREATE TABLE `qiniu_config` (
|
|||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `qiniu_content`;
|
||||
CREATE TABLE `qiniu_content` (
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||
`bucket` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`size` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`type` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`updateTime` datetime NULL DEFAULT NULL,
|
||||
`url` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
|
||||
`bucket` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'Bucket 识别符',
|
||||
`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '文件名称',
|
||||
`size` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '文件大小',
|
||||
`type` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '文件类型:私有或公开',
|
||||
`update_time` datetime NULL DEFAULT NULL COMMENT '上传或同步的时间',
|
||||
`url` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '文件url',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 10 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for quartz_job
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `quartz_job`;
|
||||
CREATE TABLE `quartz_job` (
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||
`bean_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`cron_expression` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`is_pause` bit(1) NULL DEFAULT NULL,
|
||||
`jobName` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`method_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`params` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`remark` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`updateTime` datetime NULL DEFAULT NULL,
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
|
||||
`bean_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'Spring Bean名称',
|
||||
`cron_expression` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'cron 表达式',
|
||||
`is_pause` bit(1) NULL DEFAULT NULL COMMENT '状态:1暂停、0启用',
|
||||
`job_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '任务名称',
|
||||
`method_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '方法名称',
|
||||
`params` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '参数',
|
||||
`remark` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
|
||||
`update_time` datetime NULL DEFAULT NULL COMMENT '创建或更新日期',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
|
||||
|
||||
|
@ -301,38 +336,38 @@ CREATE TABLE `quartz_job` (
|
|||
-- Records of quartz_job
|
||||
-- ----------------------------
|
||||
INSERT INTO `quartz_job` VALUES (1, 'visitsTask', '0 0 0 * * ?', b'0', '更新访客记录', 'run', NULL, '每日0点创建新的访客记录', '2019-01-08 14:53:31');
|
||||
INSERT INTO `quartz_job` VALUES (2, 'testTask', '0/5 * * * * ?', b'1', '测试1', 'run1', 'test', '带参测试,多参使用json', '2019-01-08 14:53:25');
|
||||
INSERT INTO `quartz_job` VALUES (3, 'testTask', '0/5 * * * * ?', b'1', '测试', 'run', '', '不带参测试', '2019-01-08 15:56:54');
|
||||
INSERT INTO `quartz_job` VALUES (2, 'testTask', '0/5 * * * * ?', b'1', '测试1', 'run1', 'test', '带参测试,多参使用json', '2019-01-13 14:20:50');
|
||||
INSERT INTO `quartz_job` VALUES (3, 'testTask', '0/5 * * * * ?', b'1', '测试', 'run', '', '不带参测试', '2019-01-14 09:59:19');
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for quartz_log
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `quartz_log`;
|
||||
CREATE TABLE `quartz_log` (
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||
`baen_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`createTime` datetime NULL DEFAULT NULL,
|
||||
`cron_expression` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`exceptionDetail` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL,
|
||||
`is_success` bit(1) NULL DEFAULT NULL,
|
||||
`job_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`method_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`params` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`time` bigint(20) NULL DEFAULT NULL,
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
|
||||
`baen_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'Spring Bean名称',
|
||||
`create_time` datetime NULL DEFAULT NULL COMMENT '创建日期',
|
||||
`cron_expression` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'cron 表达式',
|
||||
`exception_detail` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '异常详情',
|
||||
`is_success` bit(1) NULL DEFAULT NULL COMMENT '运行状态:1成功,0异常',
|
||||
`job_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '任务名称',
|
||||
`method_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '方法名称',
|
||||
`params` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '参数',
|
||||
`time` bigint(20) NULL DEFAULT NULL COMMENT '耗时',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 90 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for role
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `role`;
|
||||
CREATE TABLE `role` (
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||
`createTime` datetime NULL DEFAULT NULL,
|
||||
`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
|
||||
`remark` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
|
||||
`create_time` datetime NULL DEFAULT NULL COMMENT '创建日期',
|
||||
`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '名称',
|
||||
`remark` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
|
||||
|
||||
-- ----------------------------
|
||||
-- Records of role
|
||||
|
@ -345,8 +380,8 @@ INSERT INTO `role` VALUES (2, '2018-11-23 13:09:06', '普通用户', '普通用
|
|||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `roles_permissions`;
|
||||
CREATE TABLE `roles_permissions` (
|
||||
`role_id` bigint(20) NOT NULL,
|
||||
`permission_id` bigint(20) NOT NULL,
|
||||
`role_id` bigint(20) NOT NULL COMMENT '角色ID',
|
||||
`permission_id` bigint(20) NOT NULL COMMENT '权限ID',
|
||||
PRIMARY KEY (`role_id`, `permission_id`) USING BTREE,
|
||||
INDEX `FKboeuhl31go7wer3bpy6so7exi`(`permission_id`) USING BTREE,
|
||||
CONSTRAINT `FK4hrolwj4ned5i7qe8kyiaak6m` FOREIGN KEY (`role_id`) REFERENCES `role` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
|
||||
|
@ -370,23 +405,23 @@ INSERT INTO `roles_permissions` VALUES (2, 36);
|
|||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `user`;
|
||||
CREATE TABLE `user` (
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||
`avatar` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`createTime` datetime NULL DEFAULT NULL,
|
||||
`email` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`enabled` bigint(20) NULL DEFAULT NULL,
|
||||
`password` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`username` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`lastPasswordResetTime` datetime NULL DEFAULT NULL,
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
|
||||
`avatar` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '头像地址',
|
||||
`create_time` datetime NULL DEFAULT NULL COMMENT '创建日期',
|
||||
`email` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '邮箱',
|
||||
`enabled` bigint(20) NULL DEFAULT NULL COMMENT '状态:1启用、0禁用',
|
||||
`password` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '密码',
|
||||
`username` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用户名',
|
||||
`last_password_reset_time` datetime NULL DEFAULT NULL COMMENT '最后修改密码的日期',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
UNIQUE INDEX `UK_kpubos9gc2cvtkb0thktkbkes`(`email`) USING BTREE,
|
||||
UNIQUE INDEX `username`(`username`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
|
||||
|
||||
-- ----------------------------
|
||||
-- Records of user
|
||||
-- ----------------------------
|
||||
INSERT INTO `user` VALUES (1, 'https://i.loli.net/2018/12/31/5c297270b20e2.jpg', '2018-08-23 09:11:56', 'zhengjie@tom.com', 1, '14e1b600b1fd579f47433b88e8d85291', 'admin', '2018-11-23 10:12:36');
|
||||
INSERT INTO `user` VALUES (1, 'https://i.loli.net/2019/01/16/5c3ed609e6f99.jpg', '2018-08-23 09:11:56', 'zhengjie@tom.com', 1, '14e1b600b1fd579f47433b88e8d85291', 'admin', '2019-01-17 09:53:21');
|
||||
INSERT INTO `user` VALUES (3, 'https://i.loli.net/2018/12/30/5c2871d6aa101.jpg', '2018-12-27 20:05:26', 'test@qq.com', 1, '14e1b600b1fd579f47433b88e8d85291', 'test', NULL);
|
||||
|
||||
-- ----------------------------
|
||||
|
@ -394,8 +429,8 @@ INSERT INTO `user` VALUES (3, 'https://i.loli.net/2018/12/30/5c2871d6aa101.jpg',
|
|||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `users_roles`;
|
||||
CREATE TABLE `users_roles` (
|
||||
`user_id` bigint(20) NOT NULL,
|
||||
`role_id` bigint(20) NOT NULL,
|
||||
`user_id` bigint(20) NOT NULL COMMENT '用户ID',
|
||||
`role_id` bigint(20) NOT NULL COMMENT '角色ID',
|
||||
PRIMARY KEY (`user_id`, `role_id`) USING BTREE,
|
||||
INDEX `FKq4eq273l04bpu4efj0jd0jb98`(`role_id`) USING BTREE,
|
||||
CONSTRAINT `users_roles_ibfk_1` FOREIGN KEY (`role_id`) REFERENCES `role` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
|
||||
|
@ -413,28 +448,28 @@ INSERT INTO `users_roles` VALUES (3, 2);
|
|||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `verification_code`;
|
||||
CREATE TABLE `verification_code` (
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||
`code` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`createTime` datetime NULL DEFAULT NULL,
|
||||
`status` bit(1) NULL DEFAULT NULL,
|
||||
`type` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`value` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`scenes` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
|
||||
`code` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '验证码',
|
||||
`create_time` datetime NULL DEFAULT NULL COMMENT '创建日期',
|
||||
`status` bit(1) NULL DEFAULT NULL COMMENT '状态:1有效、0过期',
|
||||
`type` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '验证码类型:email或者短信',
|
||||
`value` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '接收邮箱或者手机号码',
|
||||
`scenes` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '业务名称:如重置邮箱、重置密码等',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 34 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for visits
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `visits`;
|
||||
CREATE TABLE `visits` (
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||
`date` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`ip_counts` bigint(20) NULL DEFAULT NULL,
|
||||
`pv_counts` bigint(20) NULL DEFAULT NULL,
|
||||
`weekDay` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`createTime` datetime NULL DEFAULT NULL,
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
|
||||
`date` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建日期:只存储年月日',
|
||||
`ip_counts` bigint(20) NULL DEFAULT NULL COMMENT 'IP数',
|
||||
`pv_counts` bigint(20) NULL DEFAULT NULL COMMENT '浏览量',
|
||||
`week_day` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '星期',
|
||||
`create_time` datetime NULL DEFAULT NULL COMMENT '创建日期',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 54 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 65 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
|
||||
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
|
@ -1,6 +1,6 @@
|
|||
package me.zhengjie;
|
||||
|
||||
import me.zhengjie.common.utils.SpringContextHolder;
|
||||
import me.zhengjie.utils.SpringContextHolder;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.context.annotation.Bean;
|
|
@ -1,4 +1,4 @@
|
|||
package me.zhengjie.core.config;
|
||||
package me.zhengjie.config;
|
||||
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.web.servlet.config.annotation.CorsRegistry;
|
||||
|
@ -7,27 +7,23 @@ import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry
|
|||
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
||||
|
||||
/**
|
||||
* 跨域请求
|
||||
* WebMvcConfigurer
|
||||
*
|
||||
* @author jie
|
||||
* @date 2018-11-30
|
||||
*/
|
||||
@Configuration
|
||||
@EnableWebMvc
|
||||
public class CorsConfig implements WebMvcConfigurer {
|
||||
public class ConfigurerAdapter implements WebMvcConfigurer {
|
||||
|
||||
@Override
|
||||
public void addCorsMappings(CorsRegistry registry) {
|
||||
//设置允许跨域的路径
|
||||
registry.addMapping("/**")
|
||||
//设置允许跨域请求的域名
|
||||
.allowedOrigins("*")
|
||||
//是否允许证书 不再默认开启
|
||||
.allowCredentials(true)
|
||||
//设置允许的方法
|
||||
.allowedMethods("*")
|
||||
//跨域允许时间
|
||||
.maxAge(3600);
|
||||
.allowedHeaders("*")
|
||||
.allowedOrigins("*")
|
||||
.allowedMethods("GET","POST","PUT","DELETE");
|
||||
|
||||
}
|
||||
|
||||
@Override
|
|
@ -1,11 +1,10 @@
|
|||
package me.zhengjie.monitor.config;
|
||||
package me.zhengjie.modules.monitor.config;
|
||||
|
||||
import ch.qos.logback.classic.spi.ILoggingEvent;
|
||||
import ch.qos.logback.classic.spi.IThrowableProxy;
|
||||
import ch.qos.logback.core.filter.Filter;
|
||||
import ch.qos.logback.core.spi.FilterReply;
|
||||
import me.zhengjie.monitor.domain.LogMessage;
|
||||
|
||||
import me.zhengjie.modules.monitor.domain.LogMessage;
|
||||
import java.text.DateFormat;
|
||||
import java.util.Date;
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
package me.zhengjie.monitor.config;
|
||||
package me.zhengjie.modules.monitor.config;
|
||||
|
||||
import me.zhengjie.monitor.domain.LogMessage;
|
||||
import me.zhengjie.modules.monitor.domain.LogMessage;
|
||||
import java.util.concurrent.BlockingQueue;
|
||||
import java.util.concurrent.LinkedBlockingQueue;
|
||||
|
||||
|
@ -11,11 +11,15 @@ import java.util.concurrent.LinkedBlockingQueue;
|
|||
*/
|
||||
public class LoggerQueue {
|
||||
|
||||
//队列大小
|
||||
/**
|
||||
* 队列大小
|
||||
*/
|
||||
public static final int QUEUE_MAX_SIZE = 10000;
|
||||
|
||||
private static LoggerQueue alarmMessageQueue = new LoggerQueue();
|
||||
//阻塞队列
|
||||
/**
|
||||
* 阻塞队列
|
||||
*/
|
||||
private BlockingQueue blockingQueue = new LinkedBlockingQueue<>(QUEUE_MAX_SIZE);
|
||||
|
||||
private LoggerQueue() {
|
||||
|
@ -31,7 +35,7 @@ public class LoggerQueue {
|
|||
* @return
|
||||
*/
|
||||
public boolean push(LogMessage log) {
|
||||
return this.blockingQueue.add(log);//队列满了就抛出异常,不阻塞
|
||||
return this.blockingQueue.add(log);
|
||||
}
|
||||
|
||||
/**
|
|
@ -1,6 +1,6 @@
|
|||
package me.zhengjie.monitor.config;
|
||||
package me.zhengjie.modules.monitor.config;
|
||||
|
||||
import me.zhengjie.monitor.service.VisitsService;
|
||||
import me.zhengjie.modules.monitor.service.VisitsService;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
/**
|
||||
|
@ -13,5 +13,6 @@ public class VisitsInitialization {
|
|||
public VisitsInitialization(VisitsService visitsService){
|
||||
System.out.println("--------------- 初始化站点统计,如果存在今日统计则跳过 ---------------");
|
||||
visitsService.save();
|
||||
System.out.println("--------------- 初始化站点统计完成 ---------------");
|
||||
}
|
||||
}
|
|
@ -1,16 +1,14 @@
|
|||
package me.zhengjie.monitor.config;
|
||||
package me.zhengjie.modules.monitor.config;
|
||||
|
||||
|
||||
import com.google.common.util.concurrent.ThreadFactoryBuilder;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import me.zhengjie.monitor.domain.LogMessage;
|
||||
import me.zhengjie.modules.monitor.domain.LogMessage;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.messaging.simp.SimpMessagingTemplate;
|
||||
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
|
||||
import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer;
|
||||
import javax.annotation.PostConstruct;
|
||||
import java.util.concurrent.*;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
|
||||
/**
|
||||
* 配置WebSocket消息代理端点,即stomp服务端
|
|
@ -1,4 +1,4 @@
|
|||
package me.zhengjie.monitor.domain;
|
||||
package me.zhengjie.modules.monitor.domain;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
|
@ -1,4 +1,4 @@
|
|||
package me.zhengjie.monitor.domain;
|
||||
package me.zhengjie.modules.monitor.domain;
|
||||
|
||||
import lombok.Data;
|
||||
import org.hibernate.annotations.CreationTimestamp;
|
||||
|
@ -31,7 +31,9 @@ public class Visits {
|
|||
private Long ipCounts;
|
||||
|
||||
@CreationTimestamp
|
||||
@Column(name = "create_time")
|
||||
private Timestamp createTime;
|
||||
|
||||
@Column(name = "week_day")
|
||||
private String weekDay;
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
package me.zhengjie.monitor.domain.vo;
|
||||
package me.zhengjie.modules.monitor.domain.vo;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
|
@ -1,8 +1,7 @@
|
|||
package me.zhengjie.monitor.repository;
|
||||
package me.zhengjie.modules.monitor.repository;
|
||||
|
||||
import me.zhengjie.monitor.domain.Visits;
|
||||
import me.zhengjie.modules.monitor.domain.Visits;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
|
||||
import org.springframework.data.jpa.repository.Query;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
|
@ -29,6 +28,6 @@ public interface VisitsRepository extends JpaRepository<Visits,Long> {
|
|||
* @return
|
||||
*/
|
||||
@Query(value = "select * FROM visits where " +
|
||||
"createTime between ?1 and ?2",nativeQuery = true)
|
||||
"create_time between ?1 and ?2",nativeQuery = true)
|
||||
List<Visits> findAllVisits(String date1, String date2);
|
||||
}
|
|
@ -1,23 +1,26 @@
|
|||
package me.zhengjie.monitor.rest;
|
||||
package me.zhengjie.modules.monitor.rest;
|
||||
|
||||
import me.zhengjie.common.aop.limit.Limit;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import me.zhengjie.aop.limit.Limit;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
/**
|
||||
*
|
||||
* 接口限流测试类
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("test")
|
||||
public class TestController {
|
||||
@RequestMapping("api")
|
||||
public class LimitController {
|
||||
private static final AtomicInteger ATOMIC_INTEGER = new AtomicInteger();
|
||||
|
||||
/**
|
||||
* 测试限流注解,下面配置说明该接口 60秒内最多只能访问 10次,保存到redis的键名为 limit_test,
|
||||
*/
|
||||
@Limit(key = "test", period = 60, count = 10, name = "testLimit", prefix = "limit")
|
||||
@GetMapping("limit")
|
||||
@GetMapping("/limit")
|
||||
public int testLimit() {
|
||||
return ATOMIC_INTEGER.incrementAndGet();
|
||||
}
|
|
@ -1,8 +1,8 @@
|
|||
package me.zhengjie.monitor.rest;
|
||||
package me.zhengjie.modules.monitor.rest;
|
||||
|
||||
import me.zhengjie.common.aop.log.Log;
|
||||
import me.zhengjie.monitor.domain.vo.RedisVo;
|
||||
import me.zhengjie.monitor.service.RedisService;
|
||||
import me.zhengjie.aop.log.Log;
|
||||
import me.zhengjie.modules.monitor.domain.vo.RedisVo;
|
||||
import me.zhengjie.modules.monitor.service.RedisService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.http.HttpStatus;
|
||||
|
@ -22,14 +22,14 @@ public class RedisController {
|
|||
@Autowired
|
||||
private RedisService redisService;
|
||||
|
||||
@Log(description = "查询Redis缓存")
|
||||
@Log("查询Redis缓存")
|
||||
@GetMapping(value = "/redis")
|
||||
@PreAuthorize("hasAnyRole('ADMIN','REDIS_ALL','REDIS_SELECT')")
|
||||
public ResponseEntity getRedis(String key, Pageable pageable){
|
||||
return new ResponseEntity(redisService.findByKey(key,pageable), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@Log(description = "新增Redis缓存")
|
||||
@Log("新增Redis缓存")
|
||||
@PostMapping(value = "/redis")
|
||||
@PreAuthorize("hasAnyRole('ADMIN','REDIS_ALL','REDIS_CREATE')")
|
||||
public ResponseEntity create(@Validated @RequestBody RedisVo resources){
|
||||
|
@ -37,7 +37,7 @@ public class RedisController {
|
|||
return new ResponseEntity(HttpStatus.CREATED);
|
||||
}
|
||||
|
||||
@Log(description = "修改Redis缓存")
|
||||
@Log("修改Redis缓存")
|
||||
@PutMapping(value = "/redis")
|
||||
@PreAuthorize("hasAnyRole('ADMIN','REDIS_ALL','REDIS_EDIT')")
|
||||
public ResponseEntity update(@Validated @RequestBody RedisVo resources){
|
||||
|
@ -45,7 +45,7 @@ public class RedisController {
|
|||
return new ResponseEntity(HttpStatus.NO_CONTENT);
|
||||
}
|
||||
|
||||
@Log(description = "删除Redis缓存")
|
||||
@Log("删除Redis缓存")
|
||||
@DeleteMapping(value = "/redis")
|
||||
@PreAuthorize("hasAnyRole('ADMIN','REDIS_ALL','REDIS_DELETE')")
|
||||
public ResponseEntity delete(@RequestBody RedisVo resources){
|
||||
|
@ -53,7 +53,7 @@ public class RedisController {
|
|||
return new ResponseEntity(HttpStatus.OK);
|
||||
}
|
||||
|
||||
@Log(description = "清空Redis缓存")
|
||||
@Log("清空Redis缓存")
|
||||
@DeleteMapping(value = "/redis/all")
|
||||
@PreAuthorize("hasAnyRole('ADMIN','REDIS_ALL','REDIS_DELETE')")
|
||||
public ResponseEntity deleteAll(){
|
|
@ -1,7 +1,7 @@
|
|||
package me.zhengjie.monitor.rest;
|
||||
package me.zhengjie.modules.monitor.rest;
|
||||
|
||||
import me.zhengjie.common.utils.RequestHolder;
|
||||
import me.zhengjie.monitor.service.VisitsService;
|
||||
import me.zhengjie.modules.monitor.service.VisitsService;
|
||||
import me.zhengjie.utils.RequestHolder;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
|
@ -1,6 +1,6 @@
|
|||
package me.zhengjie.monitor.service;
|
||||
package me.zhengjie.modules.monitor.service;
|
||||
|
||||
import me.zhengjie.monitor.domain.vo.RedisVo;
|
||||
import me.zhengjie.modules.monitor.domain.vo.RedisVo;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package me.zhengjie.monitor.service;
|
||||
package me.zhengjie.modules.monitor.service;
|
||||
|
||||
import org.springframework.scheduling.annotation.Async;
|
||||
|
|
@ -1,8 +1,8 @@
|
|||
package me.zhengjie.monitor.service.impl;
|
||||
package me.zhengjie.modules.monitor.service.impl;
|
||||
|
||||
import me.zhengjie.common.utils.PageUtil;
|
||||
import me.zhengjie.monitor.domain.vo.RedisVo;
|
||||
import me.zhengjie.monitor.service.RedisService;
|
||||
import me.zhengjie.modules.monitor.domain.vo.RedisVo;
|
||||
import me.zhengjie.modules.monitor.service.RedisService;
|
||||
import me.zhengjie.utils.PageUtil;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.PageImpl;
|
||||
|
@ -10,7 +10,8 @@ import org.springframework.data.domain.Pageable;
|
|||
import org.springframework.stereotype.Service;
|
||||
import redis.clients.jedis.Jedis;
|
||||
import redis.clients.jedis.JedisPool;
|
||||
import java.util.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author jie
|
|
@ -1,11 +1,11 @@
|
|||
package me.zhengjie.monitor.service.impl;
|
||||
package me.zhengjie.modules.monitor.service.impl;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import me.zhengjie.common.utils.TimeUtil;
|
||||
import me.zhengjie.monitor.domain.Visits;
|
||||
import me.zhengjie.monitor.repository.LoggingRepository;
|
||||
import me.zhengjie.monitor.repository.VisitsRepository;
|
||||
import me.zhengjie.monitor.service.VisitsService;
|
||||
import me.zhengjie.modules.monitor.domain.Visits;
|
||||
import me.zhengjie.modules.monitor.repository.VisitsRepository;
|
||||
import me.zhengjie.modules.monitor.service.VisitsService;
|
||||
import me.zhengjie.repository.LogRepository;
|
||||
import me.zhengjie.utils.StringUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Propagation;
|
||||
|
@ -30,7 +30,7 @@ public class VisitsServiceImpl implements VisitsService {
|
|||
private VisitsRepository visitsRepository;
|
||||
|
||||
@Autowired
|
||||
private LoggingRepository loggingRepository;
|
||||
private LogRepository logRepository;
|
||||
|
||||
@Override
|
||||
public void save() {
|
||||
|
@ -38,7 +38,7 @@ public class VisitsServiceImpl implements VisitsService {
|
|||
Visits visits = visitsRepository.findByDate(localDate.toString());
|
||||
if(visits == null){
|
||||
visits = new Visits();
|
||||
visits.setWeekDay(TimeUtil.getWeekDay());
|
||||
visits.setWeekDay(StringUtils.getWeekDay());
|
||||
visits.setPvCounts(1L);
|
||||
visits.setIpCounts(1L);
|
||||
visits.setDate(localDate.toString());
|
||||
|
@ -51,7 +51,7 @@ public class VisitsServiceImpl implements VisitsService {
|
|||
LocalDate localDate = LocalDate.now();
|
||||
Visits visits = visitsRepository.findByDate(localDate.toString());
|
||||
visits.setPvCounts(visits.getPvCounts()+1);
|
||||
long ipCounts = loggingRepository.findIp(localDate.toString(), localDate.plusDays(1).toString());
|
||||
long ipCounts = logRepository.findIp(localDate.toString(), localDate.plusDays(1).toString());
|
||||
visits.setIpCounts(ipCounts);
|
||||
visitsRepository.save(visits);
|
||||
}
|
|
@ -1,8 +1,8 @@
|
|||
package me.zhengjie.quartz.config;
|
||||
package me.zhengjie.modules.quartz.config;
|
||||
|
||||
import me.zhengjie.quartz.domain.QuartzJob;
|
||||
import me.zhengjie.quartz.repository.QuartzJobRepository;
|
||||
import me.zhengjie.quartz.utils.QuartzManage;
|
||||
import me.zhengjie.modules.quartz.domain.QuartzJob;
|
||||
import me.zhengjie.modules.quartz.repository.QuartzJobRepository;
|
||||
import me.zhengjie.modules.quartz.utils.QuartzManage;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.ApplicationArguments;
|
||||
import org.springframework.boot.ApplicationRunner;
|
|
@ -1,4 +1,4 @@
|
|||
package me.zhengjie.quartz.config;
|
||||
package me.zhengjie.modules.quartz.config;
|
||||
|
||||
import org.quartz.Scheduler;
|
||||
import org.quartz.spi.TriggerFiredBundle;
|
|
@ -1,7 +1,8 @@
|
|||
package me.zhengjie.quartz.domain;
|
||||
package me.zhengjie.modules.quartz.domain;
|
||||
|
||||
import lombok.Data;
|
||||
import org.hibernate.annotations.UpdateTimestamp;
|
||||
|
||||
import javax.persistence.*;
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import java.io.Serializable;
|
||||
|
@ -25,6 +26,7 @@ public class QuartzJob implements Serializable {
|
|||
/**
|
||||
* 定时器名称
|
||||
*/
|
||||
@Column(name = "job_name")
|
||||
private String jobName;
|
||||
|
||||
/**
|
||||
|
@ -71,5 +73,6 @@ public class QuartzJob implements Serializable {
|
|||
* 创建日期
|
||||
*/
|
||||
@UpdateTimestamp
|
||||
@Column(name = "update_time")
|
||||
private Timestamp updateTime;
|
||||
}
|
|
@ -1,7 +1,8 @@
|
|||
package me.zhengjie.quartz.domain;
|
||||
package me.zhengjie.modules.quartz.domain;
|
||||
|
||||
import lombok.Data;
|
||||
import org.hibernate.annotations.CreationTimestamp;
|
||||
|
||||
import javax.persistence.*;
|
||||
import java.io.Serializable;
|
||||
import java.sql.Timestamp;
|
||||
|
@ -58,7 +59,7 @@ public class QuartzLog implements Serializable {
|
|||
/**
|
||||
* 异常详细
|
||||
*/
|
||||
@Column(columnDefinition = "text")
|
||||
@Column(name = "exception_detail",columnDefinition = "text")
|
||||
private String exceptionDetail;
|
||||
|
||||
/**
|
||||
|
@ -70,5 +71,6 @@ public class QuartzLog implements Serializable {
|
|||
* 创建日期
|
||||
*/
|
||||
@CreationTimestamp
|
||||
@Column(name = "create_time")
|
||||
private Timestamp createTime;
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
package me.zhengjie.quartz.repository;
|
||||
package me.zhengjie.modules.quartz.repository;
|
||||
|
||||
import me.zhengjie.quartz.domain.QuartzJob;
|
||||
import me.zhengjie.modules.quartz.domain.QuartzJob;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
|
||||
import org.springframework.data.jpa.repository.Modifying;
|
|
@ -1,6 +1,6 @@
|
|||
package me.zhengjie.quartz.repository;
|
||||
package me.zhengjie.modules.quartz.repository;
|
||||
|
||||
import me.zhengjie.quartz.domain.QuartzLog;
|
||||
import me.zhengjie.modules.quartz.domain.QuartzLog;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
|
||||
|
|
@ -1,13 +1,13 @@
|
|||
package me.zhengjie.quartz.rest;
|
||||
package me.zhengjie.modules.quartz.rest;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import me.zhengjie.common.aop.log.Log;
|
||||
import me.zhengjie.common.exception.BadRequestException;
|
||||
import me.zhengjie.quartz.domain.QuartzJob;
|
||||
import me.zhengjie.quartz.domain.QuartzLog;
|
||||
import me.zhengjie.quartz.service.QuartzJobService;
|
||||
import me.zhengjie.quartz.service.query.QuartzJobQueryService;
|
||||
import me.zhengjie.quartz.service.query.QuartzLogQueryService;
|
||||
import me.zhengjie.aop.log.Log;
|
||||
import me.zhengjie.exception.BadRequestException;
|
||||
import me.zhengjie.modules.quartz.domain.QuartzJob;
|
||||
import me.zhengjie.modules.quartz.domain.QuartzLog;
|
||||
import me.zhengjie.modules.quartz.service.QuartzJobService;
|
||||
import me.zhengjie.modules.quartz.service.query.QuartzJobQueryService;
|
||||
import me.zhengjie.modules.quartz.service.query.QuartzLogQueryService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.http.HttpStatus;
|
||||
|
@ -36,7 +36,7 @@ public class QuartzJobController {
|
|||
@Autowired
|
||||
private QuartzLogQueryService quartzLogQueryService;
|
||||
|
||||
@Log(description = "查询定时任务")
|
||||
@Log("查询定时任务")
|
||||
@GetMapping(value = "/jobs")
|
||||
@PreAuthorize("hasAnyRole('ADMIN','JOB_ALL','JOB_SELECT')")
|
||||
public ResponseEntity getJobs(QuartzJob resources, Pageable pageable){
|
||||
|
@ -55,7 +55,7 @@ public class QuartzJobController {
|
|||
return new ResponseEntity(quartzLogQueryService.queryAll(resources,pageable), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@Log(description = "新增定时任务")
|
||||
@Log("新增定时任务")
|
||||
@PostMapping(value = "/jobs")
|
||||
@PreAuthorize("hasAnyRole('ADMIN','JOB_ALL','JOB_CREATE')")
|
||||
public ResponseEntity create(@Validated @RequestBody QuartzJob resources){
|
||||
|
@ -65,7 +65,7 @@ public class QuartzJobController {
|
|||
return new ResponseEntity(quartzJobService.create(resources),HttpStatus.CREATED);
|
||||
}
|
||||
|
||||
@Log(description = "修改定时任务")
|
||||
@Log("修改定时任务")
|
||||
@PutMapping(value = "/jobs")
|
||||
@PreAuthorize("hasAnyRole('ADMIN','JOB_ALL','JOB_EDIT')")
|
||||
public ResponseEntity update(@Validated @RequestBody QuartzJob resources){
|
||||
|
@ -76,7 +76,7 @@ public class QuartzJobController {
|
|||
return new ResponseEntity(HttpStatus.NO_CONTENT);
|
||||
}
|
||||
|
||||
@Log(description = "更改定时任务状态")
|
||||
@Log("更改定时任务状态")
|
||||
@PutMapping(value = "/jobs/{id}")
|
||||
@PreAuthorize("hasAnyRole('ADMIN','JOB_ALL','JOB_EDIT')")
|
||||
public ResponseEntity updateIsPause(@PathVariable Long id){
|
||||
|
@ -84,7 +84,7 @@ public class QuartzJobController {
|
|||
return new ResponseEntity(HttpStatus.NO_CONTENT);
|
||||
}
|
||||
|
||||
@Log(description = "执行定时任务")
|
||||
@Log("执行定时任务")
|
||||
@PutMapping(value = "/jobs/exec/{id}")
|
||||
@PreAuthorize("hasAnyRole('ADMIN','JOB_ALL','JOB_EDIT')")
|
||||
public ResponseEntity execution(@PathVariable Long id){
|
||||
|
@ -92,7 +92,7 @@ public class QuartzJobController {
|
|||
return new ResponseEntity(HttpStatus.NO_CONTENT);
|
||||
}
|
||||
|
||||
@Log(description = "删除定时任务")
|
||||
@Log("删除定时任务")
|
||||
@DeleteMapping(value = "/jobs/{id}")
|
||||
@PreAuthorize("hasAnyRole('ADMIN','JOB_ALL','JOB_DELETE')")
|
||||
public ResponseEntity delete(@PathVariable Long id){
|
|
@ -1,13 +1,13 @@
|
|||
package me.zhengjie.quartz.service;
|
||||
package me.zhengjie.modules.quartz.service;
|
||||
|
||||
import me.zhengjie.quartz.domain.QuartzJob;
|
||||
import me.zhengjie.modules.quartz.domain.QuartzJob;
|
||||
import org.springframework.cache.annotation.CacheConfig;
|
||||
import org.springframework.cache.annotation.CacheEvict;
|
||||
import org.springframework.cache.annotation.Cacheable;
|
||||
|
||||
/**
|
||||
* @author 郑杰
|
||||
* @date 2018/10/05 19:17:38
|
||||
* @author jie
|
||||
* @date 2019-01-07
|
||||
*/
|
||||
@CacheConfig(cacheNames = "quartzJob")
|
||||
public interface QuartzJobService {
|
|
@ -1,17 +1,16 @@
|
|||
package me.zhengjie.quartz.service.impl;
|
||||
package me.zhengjie.modules.quartz.service.impl;
|
||||
|
||||
import me.zhengjie.common.exception.BadRequestException;
|
||||
import me.zhengjie.common.utils.ValidationUtil;
|
||||
import me.zhengjie.quartz.domain.QuartzJob;
|
||||
import me.zhengjie.quartz.repository.QuartzJobRepository;
|
||||
import me.zhengjie.quartz.service.QuartzJobService;
|
||||
import me.zhengjie.quartz.utils.QuartzManage;
|
||||
import me.zhengjie.exception.BadRequestException;
|
||||
import me.zhengjie.modules.quartz.domain.QuartzJob;
|
||||
import me.zhengjie.modules.quartz.repository.QuartzJobRepository;
|
||||
import me.zhengjie.modules.quartz.service.QuartzJobService;
|
||||
import me.zhengjie.modules.quartz.utils.QuartzManage;
|
||||
import me.zhengjie.utils.ValidationUtil;
|
||||
import org.quartz.CronExpression;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Propagation;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
|
@ -1,8 +1,8 @@
|
|||
package me.zhengjie.quartz.service.query;
|
||||
package me.zhengjie.modules.quartz.service.query;
|
||||
|
||||
import me.zhengjie.common.utils.PageUtil;
|
||||
import me.zhengjie.quartz.domain.QuartzJob;
|
||||
import me.zhengjie.quartz.repository.QuartzJobRepository;
|
||||
import me.zhengjie.modules.quartz.domain.QuartzJob;
|
||||
import me.zhengjie.modules.quartz.repository.QuartzJobRepository;
|
||||
import me.zhengjie.utils.PageUtil;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.cache.annotation.CacheConfig;
|
||||
import org.springframework.cache.annotation.Cacheable;
|
|
@ -1,8 +1,8 @@
|
|||
package me.zhengjie.quartz.service.query;
|
||||
package me.zhengjie.modules.quartz.service.query;
|
||||
|
||||
import me.zhengjie.common.utils.PageUtil;
|
||||
import me.zhengjie.quartz.domain.QuartzLog;
|
||||
import me.zhengjie.quartz.repository.QuartzLogRepository;
|
||||
import me.zhengjie.modules.quartz.domain.QuartzLog;
|
||||
import me.zhengjie.modules.quartz.repository.QuartzLogRepository;
|
||||
import me.zhengjie.utils.PageUtil;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.data.jpa.domain.Specification;
|
|
@ -1,4 +1,4 @@
|
|||
package me.zhengjie.quartz.task;
|
||||
package me.zhengjie.modules.quartz.task;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Component;
|
|
@ -1,6 +1,6 @@
|
|||
package me.zhengjie.quartz.task;
|
||||
package me.zhengjie.modules.quartz.task;
|
||||
|
||||
import me.zhengjie.monitor.service.VisitsService;
|
||||
import me.zhengjie.modules.monitor.service.VisitsService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
|
@ -1,11 +1,11 @@
|
|||
package me.zhengjie.quartz.utils;
|
||||
package me.zhengjie.modules.quartz.utils;
|
||||
|
||||
import me.zhengjie.common.utils.SpringContextHolder;
|
||||
import me.zhengjie.common.utils.ThrowableUtil;
|
||||
import me.zhengjie.quartz.domain.QuartzJob;
|
||||
import me.zhengjie.quartz.domain.QuartzLog;
|
||||
import me.zhengjie.quartz.repository.QuartzLogRepository;
|
||||
import me.zhengjie.quartz.service.QuartzJobService;
|
||||
import me.zhengjie.modules.quartz.domain.QuartzJob;
|
||||
import me.zhengjie.modules.quartz.domain.QuartzLog;
|
||||
import me.zhengjie.modules.quartz.repository.QuartzLogRepository;
|
||||
import me.zhengjie.modules.quartz.service.QuartzJobService;
|
||||
import me.zhengjie.utils.SpringContextHolder;
|
||||
import me.zhengjie.utils.ThrowableUtil;
|
||||
import org.quartz.JobExecutionContext;
|
||||
import org.quartz.Scheduler;
|
||||
import org.slf4j.Logger;
|
|
@ -1,8 +1,8 @@
|
|||
package me.zhengjie.quartz.utils;
|
||||
package me.zhengjie.modules.quartz.utils;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import me.zhengjie.common.exception.BadRequestException;
|
||||
import me.zhengjie.quartz.domain.QuartzJob;
|
||||
import me.zhengjie.exception.BadRequestException;
|
||||
import me.zhengjie.modules.quartz.domain.QuartzJob;
|
||||
import org.quartz.*;
|
||||
import org.quartz.impl.triggers.CronTriggerImpl;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
@ -50,7 +50,7 @@ public class QuartzManage {
|
|||
}
|
||||
} catch (Exception e){
|
||||
log.error("创建定时任务失败", e);
|
||||
throw new BadRequestException(e.getMessage());
|
||||
throw new BadRequestException("创建定时任务失败");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -63,6 +63,11 @@ public class QuartzManage {
|
|||
try {
|
||||
TriggerKey triggerKey = TriggerKey.triggerKey(JOB_NAME + quartzJob.getId());
|
||||
CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
|
||||
// 如果不存在则创建一个定时任务
|
||||
if(trigger == null){
|
||||
addJob(quartzJob);
|
||||
trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
|
||||
}
|
||||
CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(quartzJob.getCronExpression());
|
||||
trigger = trigger.getTriggerBuilder().withIdentity(triggerKey).withSchedule(scheduleBuilder).build();
|
||||
//重置启动时间
|
||||
|
@ -75,7 +80,7 @@ public class QuartzManage {
|
|||
}
|
||||
} catch (Exception e){
|
||||
log.error("更新定时任务失败", e);
|
||||
throw new BadRequestException(e.getMessage());
|
||||
throw new BadRequestException("更新定时任务失败");
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -91,7 +96,7 @@ public class QuartzManage {
|
|||
scheduler.deleteJob(jobKey);
|
||||
} catch (Exception e){
|
||||
log.error("删除定时任务失败", e);
|
||||
throw new BadRequestException(e.getMessage());
|
||||
throw new BadRequestException("删除定时任务失败");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -112,7 +117,7 @@ public class QuartzManage {
|
|||
scheduler.resumeJob(jobKey);
|
||||
} catch (Exception e){
|
||||
log.error("恢复定时任务失败", e);
|
||||
throw new BadRequestException(e.getMessage());
|
||||
throw new BadRequestException("恢复定时任务失败");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -135,7 +140,7 @@ public class QuartzManage {
|
|||
scheduler.triggerJob(jobKey,dataMap);
|
||||
} catch (Exception e){
|
||||
log.error("定时任务执行失败", e);
|
||||
throw new BadRequestException(e.getMessage());
|
||||
throw new BadRequestException("定时任务执行失败");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -150,7 +155,7 @@ public class QuartzManage {
|
|||
scheduler.pauseJob(jobKey);
|
||||
} catch (Exception e){
|
||||
log.error("定时任务暂停失败", e);
|
||||
throw new BadRequestException(e.getMessage());
|
||||
throw new BadRequestException("定时任务暂停失败");
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,10 +1,8 @@
|
|||
package me.zhengjie.quartz.utils;
|
||||
package me.zhengjie.modules.quartz.utils;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import me.zhengjie.common.utils.SpringContextHolder;
|
||||
import me.zhengjie.utils.SpringContextHolder;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.util.ReflectionUtils;
|
||||
import java.lang.reflect.Method;
|
||||
|
|
@ -1,8 +1,8 @@
|
|||
package me.zhengjie.core.config;
|
||||
package me.zhengjie.modules.security.config;
|
||||
|
||||
import me.zhengjie.core.security.JwtAuthenticationEntryPoint;
|
||||
import me.zhengjie.core.security.JwtAuthorizationTokenFilter;
|
||||
import me.zhengjie.core.service.JwtUserDetailsService;
|
||||
import me.zhengjie.modules.security.security.JwtAuthenticationEntryPoint;
|
||||
import me.zhengjie.modules.security.security.JwtAuthorizationTokenFilter;
|
||||
import me.zhengjie.modules.security.service.JwtUserDetailsService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
|
@ -23,7 +23,7 @@ import org.springframework.security.web.authentication.UsernamePasswordAuthentic
|
|||
@Configuration
|
||||
@EnableWebSecurity
|
||||
@EnableGlobalMethodSecurity(prePostEnabled = true)
|
||||
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
|
||||
public class SecurityConfig extends WebSecurityConfigurerAdapter {
|
||||
|
||||
@Autowired
|
||||
private JwtAuthenticationEntryPoint unauthorizedHandler;
|
||||
|
@ -63,6 +63,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
|
|||
|
||||
@Override
|
||||
protected void configure(HttpSecurity httpSecurity) throws Exception {
|
||||
|
||||
httpSecurity
|
||||
|
||||
// 禁用 CSRF
|
|
@ -1,22 +1,21 @@
|
|||
package me.zhengjie.core.rest;
|
||||
package me.zhengjie.modules.security.rest;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import me.zhengjie.common.aop.log.Log;
|
||||
import me.zhengjie.core.security.AuthenticationToken;
|
||||
import me.zhengjie.core.security.AuthorizationUser;
|
||||
import me.zhengjie.core.utils.JwtTokenUtil;
|
||||
import me.zhengjie.core.security.JwtUser;
|
||||
import me.zhengjie.core.utils.EncryptUtils;
|
||||
import me.zhengjie.aop.log.Log;
|
||||
import me.zhengjie.modules.security.security.AuthenticationToken;
|
||||
import me.zhengjie.modules.security.security.AuthorizationUser;
|
||||
import me.zhengjie.modules.security.security.JwtUser;
|
||||
import me.zhengjie.utils.EncryptUtils;
|
||||
import me.zhengjie.modules.security.utils.JwtTokenUtil;
|
||||
import me.zhengjie.utils.SecurityContextHolder;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.security.authentication.AccountExpiredException;
|
||||
import org.springframework.security.authentication.AuthenticationManager;
|
||||
import org.springframework.security.core.userdetails.UserDetails;
|
||||
import org.springframework.security.core.userdetails.UserDetailsService;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
/**
|
||||
* @author jie
|
||||
|
@ -31,9 +30,6 @@ public class AuthenticationController {
|
|||
@Value("${jwt.header}")
|
||||
private String tokenHeader;
|
||||
|
||||
@Autowired
|
||||
private AuthenticationManager authenticationManager;
|
||||
|
||||
@Autowired
|
||||
private JwtTokenUtil jwtTokenUtil;
|
||||
|
||||
|
@ -46,9 +42,9 @@ public class AuthenticationController {
|
|||
* @param authorizationUser
|
||||
* @return
|
||||
*/
|
||||
@Log(description = "用户登录")
|
||||
@Log("用户登录")
|
||||
@PostMapping(value = "${jwt.auth.path}")
|
||||
public ResponseEntity<?> authenticationLogin(@RequestBody AuthorizationUser authorizationUser){
|
||||
public ResponseEntity<?> login(@RequestBody AuthorizationUser authorizationUser){
|
||||
|
||||
final UserDetails userDetails = userDetailsService.loadUserByUsername(authorizationUser.getUsername());
|
||||
|
||||
|
@ -69,12 +65,12 @@ public class AuthenticationController {
|
|||
|
||||
/**
|
||||
* 获取用户信息
|
||||
* @param request
|
||||
* @return
|
||||
*/
|
||||
@GetMapping(value = "${jwt.auth.account}")
|
||||
public ResponseEntity getUserInfo(HttpServletRequest request){
|
||||
JwtUser jwtUser = (JwtUser)userDetailsService.loadUserByUsername(jwtTokenUtil.getUserName(request));
|
||||
public ResponseEntity getUserInfo(){
|
||||
UserDetails userDetails = SecurityContextHolder.getUserDetails();
|
||||
JwtUser jwtUser = (JwtUser)userDetailsService.loadUserByUsername(userDetails.getUsername());
|
||||
return ResponseEntity.ok(jwtUser);
|
||||
}
|
||||
}
|
|
@ -1,7 +1,8 @@
|
|||
package me.zhengjie.core.security;
|
||||
package me.zhengjie.modules.security.security;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
|
@ -1,4 +1,4 @@
|
|||
package me.zhengjie.core.security;
|
||||
package me.zhengjie.modules.security.security;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
|
@ -1,4 +1,4 @@
|
|||
package me.zhengjie.core.security;
|
||||
package me.zhengjie.modules.security.security;
|
||||
|
||||
import org.springframework.security.core.AuthenticationException;
|
||||
import org.springframework.security.web.AuthenticationEntryPoint;
|
|
@ -1,9 +1,8 @@
|
|||
package me.zhengjie.core.security;
|
||||
package me.zhengjie.modules.security.security;
|
||||
|
||||
import io.jsonwebtoken.ExpiredJwtException;
|
||||
import me.zhengjie.core.utils.JwtTokenUtil;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import me.zhengjie.modules.security.utils.JwtTokenUtil;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
|
||||
|
@ -19,11 +18,10 @@ import javax.servlet.http.HttpServletRequest;
|
|||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
|
||||
@Slf4j
|
||||
@Component
|
||||
public class JwtAuthorizationTokenFilter extends OncePerRequestFilter {
|
||||
|
||||
private final Logger logger = LoggerFactory.getLogger(this.getClass());
|
||||
|
||||
private final UserDetailsService userDetailsService;
|
||||
private final JwtTokenUtil jwtTokenUtil;
|
||||
private final String tokenHeader;
|
||||
|
@ -36,7 +34,7 @@ public class JwtAuthorizationTokenFilter extends OncePerRequestFilter {
|
|||
|
||||
@Override
|
||||
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException {
|
||||
logger.debug("processing authentication for '{}'", request.getRequestURL());
|
||||
log.debug("processing authentication for '{}'", request.getRequestURL());
|
||||
|
||||
final String requestHeader = request.getHeader(this.tokenHeader);
|
||||
|
||||
|
@ -47,14 +45,14 @@ public class JwtAuthorizationTokenFilter extends OncePerRequestFilter {
|
|||
try {
|
||||
username = jwtTokenUtil.getUsernameFromToken(authToken);
|
||||
} catch (ExpiredJwtException e) {
|
||||
logger.error(e.getMessage());
|
||||
log.error(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
logger.debug("checking authentication for user '{}'", username);
|
||||
log.debug("checking authentication for user '{}'", username);
|
||||
|
||||
if (username != null && SecurityContextHolder.getContext().getAuthentication() == null) {
|
||||
logger.debug("security context was null, so authorizating user");
|
||||
log.debug("security context was null, so authorizating user");
|
||||
|
||||
// It is not compelling necessary to load the use details from the database. You could also store the information
|
||||
// in the token and read it from it. It's up to you ;)
|
||||
|
@ -65,7 +63,7 @@ public class JwtAuthorizationTokenFilter extends OncePerRequestFilter {
|
|||
if (jwtTokenUtil.validateToken(authToken, userDetails)) {
|
||||
UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities());
|
||||
authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
|
||||
logger.info("authorizated user '{}', setting security context", username);
|
||||
log.info("authorizated user '{}', setting security context", username);
|
||||
SecurityContextHolder.getContext().setAuthentication(authentication);
|
||||
}
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
package me.zhengjie.core.security;
|
||||
package me.zhengjie.modules.security.security;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
import lombok.AllArgsConstructor;
|
||||
|
@ -7,7 +7,10 @@ import org.springframework.security.core.GrantedAuthority;
|
|||
import org.springframework.security.core.userdetails.UserDetails;
|
||||
|
||||
import java.sql.Timestamp;
|
||||
import java.util.*;
|
||||
import java.util.Collection;
|
||||
import java.util.Date;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* @author jie
|
|
@ -1,13 +1,12 @@
|
|||
package me.zhengjie.core.service;
|
||||
package me.zhengjie.modules.security.service;
|
||||
|
||||
import me.zhengjie.common.exception.EntityNotFoundException;
|
||||
import me.zhengjie.common.utils.ValidationUtil;
|
||||
import me.zhengjie.core.security.JwtUser;
|
||||
import me.zhengjie.system.domain.Permission;
|
||||
import me.zhengjie.system.domain.Role;
|
||||
import me.zhengjie.system.domain.User;
|
||||
import me.zhengjie.system.repository.PermissionRepository;
|
||||
import me.zhengjie.system.repository.UserRepository;
|
||||
import me.zhengjie.modules.system.domain.Permission;
|
||||
import me.zhengjie.modules.system.domain.Role;
|
||||
import me.zhengjie.modules.system.domain.User;
|
||||
import me.zhengjie.exception.EntityNotFoundException;
|
||||
import me.zhengjie.modules.system.repository.UserRepository;
|
||||
import me.zhengjie.modules.security.security.JwtUser;
|
||||
import me.zhengjie.utils.ValidationUtil;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.cache.annotation.CacheConfig;
|
||||
import org.springframework.cache.annotation.Cacheable;
|
||||
|
@ -18,7 +17,6 @@ import org.springframework.security.core.userdetails.UserDetailsService;
|
|||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Propagation;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
@ -35,9 +33,6 @@ public class JwtUserDetailsService implements UserDetailsService {
|
|||
@Autowired
|
||||
private UserRepository userRepository;
|
||||
|
||||
@Autowired
|
||||
private PermissionRepository permissionRepository;
|
||||
|
||||
@Override
|
||||
public UserDetails loadUserByUsername(String username){
|
||||
|
||||
|
@ -62,20 +57,20 @@ public class JwtUserDetailsService implements UserDetailsService {
|
|||
user.getPassword(),
|
||||
user.getAvatar(),
|
||||
user.getEmail(),
|
||||
mapToGrantedAuthorities(user.getRoles(),permissionRepository),
|
||||
mapToGrantedAuthorities(user.getRoles()),
|
||||
user.getEnabled(),
|
||||
user.getCreateTime(),
|
||||
user.getLastPasswordResetTime()
|
||||
);
|
||||
}
|
||||
|
||||
private static List<GrantedAuthority> mapToGrantedAuthorities(Set<Role> roles,PermissionRepository permissionRepository) {
|
||||
private static List<GrantedAuthority> mapToGrantedAuthorities(Set<Role> roles) {
|
||||
|
||||
Set<Permission> permissions = new HashSet<>();
|
||||
for (Role role : roles) {
|
||||
Set<Role> roleSet = new HashSet<>();
|
||||
roleSet.add(role);
|
||||
permissions.addAll(permissionRepository.findByRoles(roleSet));
|
||||
permissions.addAll(role.getPermissions());
|
||||
}
|
||||
|
||||
return permissions.stream()
|
|
@ -1,9 +1,9 @@
|
|||
package me.zhengjie.core.utils;
|
||||
package me.zhengjie.modules.security.utils;
|
||||
|
||||
import io.jsonwebtoken.*;
|
||||
import io.jsonwebtoken.impl.DefaultClock;
|
||||
import me.zhengjie.common.exception.BadRequestException;
|
||||
import me.zhengjie.core.security.JwtUser;
|
||||
import me.zhengjie.exception.BadRequestException;
|
||||
import me.zhengjie.modules.security.security.JwtUser;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.security.core.userdetails.UserDetails;
|
||||
|
@ -111,31 +111,14 @@ public class JwtTokenUtil implements Serializable {
|
|||
JwtUser user = (JwtUser) userDetails;
|
||||
final String username = getUsernameFromToken(token);
|
||||
final Date created = getIssuedAtDateFromToken(token);
|
||||
//final Date expiration = getExpirationDateFromToken(token);
|
||||
// final Date expiration = getExpirationDateFromToken(token);
|
||||
// 如果token存在,且token创建日期 > 最后修改密码的日期 则代表token有效
|
||||
return (
|
||||
username.equals(user.getUsername())
|
||||
&& !isTokenExpired(token)
|
||||
&& !isCreatedBeforeLastPasswordReset(created, user.getLastPasswordResetDate())
|
||||
);
|
||||
}
|
||||
public String getUserName(HttpServletRequest request){
|
||||
|
||||
String authToken = request.getHeader(tokenHeader);
|
||||
|
||||
if(StringUtils.isEmpty(authToken)||authToken.length()<7){
|
||||
throw new BadRequestException(HttpStatus.FORBIDDEN,"Token令牌无效");
|
||||
}
|
||||
|
||||
final String token = authToken.substring(7);
|
||||
String username = null;
|
||||
try {
|
||||
username = getUsernameFromToken(token);
|
||||
} catch (ExpiredJwtException e){
|
||||
throw new BadRequestException(HttpStatus.UNAUTHORIZED,"Token令牌已过期");
|
||||
}
|
||||
|
||||
return username;
|
||||
}
|
||||
|
||||
private Date calculateExpirationDate(Date createdDate) {
|
||||
return new Date(createdDate.getTime() + expiration);
|
|
@ -1,4 +1,4 @@
|
|||
package me.zhengjie.system.domain;
|
||||
package me.zhengjie.modules.system.domain;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
@ -44,6 +44,7 @@ public class Menu {
|
|||
/**
|
||||
* 是否为外链 true/false
|
||||
*/
|
||||
@Column(name = "i_frame")
|
||||
private Boolean iFrame;
|
||||
|
||||
@ManyToMany
|
||||
|
@ -51,5 +52,6 @@ public class Menu {
|
|||
private Set<Role> roles;
|
||||
|
||||
@CreationTimestamp
|
||||
@Column(name = "create_time")
|
||||
private Timestamp createTime;
|
||||
}
|
|
@ -1,9 +1,10 @@
|
|||
package me.zhengjie.system.domain;
|
||||
package me.zhengjie.modules.system.domain;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import org.hibernate.annotations.CreationTimestamp;
|
||||
|
||||
import javax.persistence.*;
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
@ -43,6 +44,7 @@ public class Permission implements Serializable{
|
|||
private Set<Role> roles;
|
||||
|
||||
@CreationTimestamp
|
||||
@Column(name = "create_time")
|
||||
private Timestamp createTime;
|
||||
|
||||
@Override
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue