diff --git a/nladmin-system/nlsso-server/pom.xml b/nladmin-system/nlsso-server/pom.xml index ed472bd..6006c7b 100644 --- a/nladmin-system/nlsso-server/pom.xml +++ b/nladmin-system/nlsso-server/pom.xml @@ -12,43 +12,72 @@ 0.0.1-SNAPSHOT nlsso-server - UTF-8 UTF-8 1.8 1.16 - 1.2.70 1.1.22 - 2.5.0 - 1.3.1.Final + 1.2.0.Final 1.31.0 - 5.8.22 + 5.7.14 0.11.1 + 1.2.83 - 5.9.0 - 8.2.0 + 1.9 - + + + + + - com.yomahub - tlog-all-spring-boot-starter - 1.5.0 + org.codehaus.groovy + groovy-all + 3.0.13 + pom - + + - com.baomidou - dynamic-datasource-spring-boot-starter - 4.1.3 + com.github.oshi + oshi-core + 5.8.5 - + + + net.java.dev.jna + jna + 5.6.0 + + + + net.java.dev.jna + jna-platform + 5.6.0 + + + + + net.coobird + thumbnailator + 0.4.8 + + + + org.apache.httpcomponents + httpasyncclient + 4.1.4 + + + org.fusesource.jansi jansi - 1.17.1 + 1.9 @@ -57,13 +86,33 @@ hutool-all ${hutool.version} - + - org.springframework - spring-jdbc - 5.2.9.RELEASE + org.apache.poi + poi + 4.0.0 + + + org.apache.poi + poi-ooxml + 4.0.0 + + + org.apache.poi + poi-ooxml-schemas + 4.0.0 + + + com.github.pagehelper + pagehelper + 5.3.2 + + + org.mybatis + mybatis + + - org.springframework.boot @@ -77,191 +126,19 @@ test - - org.reflections - reflections - 0.9.10 - - - - com.baomidou - mybatis-plus-boot-starter - 3.4.0 - - - - - - - - org.apache.velocity - velocity-engine-core - 2.3 - - - com.baomidou - mybatis-plus-generator - 3.4.0 - + cn.dev33 sa-token-spring-boot-starter ${sa-token.version} - - cn.dev33 - sa-token-sso - ${sa-token.version} - cn.dev33 sa-token-jwt ${sa-token.version} - - cn.dev33 - sa-token-dao-redis - 1.31.0 - - - - cn.dev33 - sa-token-alone-redis - 1.33.0 - - - - - org.springframework.boot - spring-boot-starter-cache - - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.apache.commons - commons-pool2 - ${commons-pool2.version} - - - org.apache.commons - commons-lang3 - - - - mysql - mysql-connector-java - runtime - - - - com.alibaba - druid-spring-boot-starter - ${druid.version} - - - net.dreamlu - mica-ip2region - 2.5.6 - - - - org.projectlombok - lombok - true - - - - com.alibaba - easyexcel - 2.1.6 - - - org.apache.poi - poi-ooxml-schemas - 3.17 - - - org.apache.poi - poi - 3.17 - - - org.apache.poi - poi-ooxml - 3.17 - - - - - com.alibaba - fastjson - ${fastjson.version} - - - javax.inject - javax.inject - 1 - - - - - com.github.whvcse - easy-captcha - 1.6.2 - - - com.github.pagehelper - pagehelper-spring-boot-starter - 1.2.12 - - - org.mybatis - mybatis - - - - - org.springframework.boot - spring-boot-starter-aop - - - - - com.google.guava - guava - 29.0-jre - - - - org.springframework.boot - spring-boot-starter-freemarker - - - - commons-configuration - commons-configuration - ${configuration.version} - - - - - - - org.springframework.boot - spring-boot-starter-websocket - - - - io.jsonwebtoken - jjwt-api - ${jjwt.version} - io.jsonwebtoken jjwt-impl @@ -272,115 +149,175 @@ jjwt-jackson ${jjwt.version} - - - org.quartz-scheduler - quartz - - - com.jcraft - jsch - 0.1.55 - - - org.apache.httpcomponents - httpclient - 4.5.13 - - - jakarta.transaction - jakarta.transaction-api - 1.3.3 - - - jakarta.persistence - jakarta.persistence-api - 2.2.3 - - - - commons-io - commons-io - 2.8.0 - org.apache.lucene lucene-core - ${lucene.version} + 8.2.0 org.apache.lucene lucene-highlighter - ${lucene.version} + 8.2.0 org.apache.lucene lucene-analyzers-common - ${lucene.version} + 8.2.0 com.github.magese ik-analyzer - ${lucene.version} + 8.2.0 org.apache.lucene lucene-analyzers-smartcn - ${lucene.version} + 8.2.0 org.apache.lucene lucene-queryparser - ${lucene.version} + 8.2.0 + + + + org.springframework.boot + spring-boot-starter-cache + + + + org.apache.commons + commons-lang3 + + + + + mysql + mysql-connector-java + 8.0.20 + + + + com.alibaba + druid-spring-boot-starter + ${druid.version} + + + + org.projectlombok + lombok + true + + + com.alibaba + fastjson + ${fastjson.version} + + + cn.dev33 + sa-token-dao-redis + 1.31.0 + + + com.baomidou + mybatis-plus-boot-starter + 3.4.0 + + + com.baomidou + mybatis-plus-generator + 3.4.0 + + + + + com.github.whvcse + easy-captcha + 1.6.2 + + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + org.springframework.boot + spring-boot-starter-freemarker + + + commons-configuration + commons-configuration + ${configuration.version} + + + + com.google.guava + guava + 29.0-jre + + + + org.springframework.boot + spring-boot-starter-websocket - org.redisson redisson-spring-boot-starter 3.16.4 + + + org.codehaus.groovy + groovy-all + 3.0.13 + pom + + + + + + org.quartz-scheduler + quartz + + + com.yomahub + tlog-core + 1.5.0 + - - - - - - - nexus - - nexus - http://121.40.234.130:8081/repository/maven-releases/ - - - - - + ${project.artifactId} org.springframework.boot spring-boot-maven-plugin - org.nl.AppRun + + true + + + + repackage + + + - org.apache.maven.plugins - maven-surefire-plugin + maven-war-plugin + 3.2.2 - true + false + ${project.artifactId} @@ -392,8 +329,10 @@ **/*.* + + **/*.java + - ${basedir}/src/main/resources @@ -402,5 +341,4 @@ - diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/AppRun.java b/nladmin-system/nlsso-server/src/main/java/org/nl/AppRun.java index 76e4a63..e651830 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/AppRun.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/AppRun.java @@ -1,9 +1,6 @@ package org.nl; import cn.dev33.satoken.annotation.SaIgnore; -//import com.alicp.jetcache.anno.config.EnableCreateCacheAnnotation; -//import com.alicp.jetcache.anno.config.EnableMethodCache; -//import org.dromara.dynamictp.core.spring.EnableDynamicTp; import org.mybatis.spring.annotation.MapperScan; import org.nl.config.SpringContextHolder; import org.springframework.boot.ApplicationArguments; @@ -22,7 +19,6 @@ import org.springframework.web.bind.annotation.RestController; * @author ldjun * @date 2021/2/22 9:20:19 */ -@EnableAsync @RestController @SpringBootApplication(exclude = { org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/common/domain/vo/DeptVo.java b/nladmin-system/nlsso-server/src/main/java/org/nl/common/domain/vo/DeptVo.java index a673dc3..1b4e0a8 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/common/domain/vo/DeptVo.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/common/domain/vo/DeptVo.java @@ -20,8 +20,7 @@ import lombok.Getter; import lombok.Setter; import org.nl.common.base.BaseDTO; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; +//import javax.validation.constraints.NotBlank; import java.io.Serializable; import java.util.List; @@ -41,29 +40,25 @@ public class DeptVo extends BaseDTO implements Serializable { private String ext_id; - + private Integer dept_sort; - @NotBlank - private String name; - + private String zh_name; - + private String en_name; - + private String in_name; - @NotNull - private Boolean is_used; - + private Long pid; - + private Integer sub_count = 0; /** diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/common/domain/vo/RoleVo.java b/nladmin-system/nlsso-server/src/main/java/org/nl/common/domain/vo/RoleVo.java index 40d3bb2..9944c4d 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/common/domain/vo/RoleVo.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/common/domain/vo/RoleVo.java @@ -19,7 +19,6 @@ package org.nl.common.domain.vo; import lombok.Getter; import lombok.Setter; -import javax.validation.constraints.NotBlank; import java.io.Serializable; /** @@ -33,20 +32,18 @@ public class RoleVo implements Serializable { private Long role_id; - @NotBlank - private String name; - + private Integer level = 3; - + private String remark; - + private String order_seq; - + private String is_used; } diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/common/logging/aspect/LogAspect.java b/nladmin-system/nlsso-server/src/main/java/org/nl/common/logging/aspect/LogAspect.java index 5253ed6..0491fb8 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/common/logging/aspect/LogAspect.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/common/logging/aspect/LogAspect.java @@ -13,33 +13,26 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +package org.nl.common.domain.aspect; -package org.nl.common.logging.aspect; - +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; +import com.alibaba.fastjson.JSON; +import io.netty.util.internal.ThrowableUtil; import lombok.extern.slf4j.Slf4j; -import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint; -import org.aspectj.lang.annotation.AfterThrowing; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; -import org.aspectj.lang.annotation.Pointcut; import org.aspectj.lang.reflect.MethodSignature; -import org.nl.common.utils.RequestHolder; -import org.nl.common.utils.SecurityUtils; -import org.nl.common.utils.StringUtils; -import org.nl.common.utils.ThrowableUtil; -import org.nl.system.service.logging.ISysLogService; -import org.nl.system.service.logging.dao.SysLog; +import org.nl.common.utils.*; +import org.nl.config.lucene.LuceneAppender; +import org.slf4j.MDC; import org.springframework.stereotype.Component; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.context.request.RequestContextHolder; -import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.lang.reflect.Method; import java.lang.reflect.Parameter; import java.util.ArrayList; @@ -47,67 +40,63 @@ import java.util.HashMap; import java.util.List; import java.util.Map; - /** * @author Zheng Jie * @date 2018-11-24 */ - @Component @Aspect @Slf4j public class LogAspect { - private final ISysLogService logService; - ThreadLocal currentTime = new ThreadLocal<>(); - - public LogAspect(ISysLogService logService) { - this.logService = logService; - } - - /** - * 配置切入点 - */ - - @Pointcut("@annotation(org.nl.common.logging.annotation.Log)") - public void logPointcut() { - // 该方法无方法体,主要为了让同类中其他方法使用此切入点 - } /** * 配置环绕通知,使用在方法logPointcut()上注册的切入点 * * @param joinPoint join point for advice */ - - @Around("logPointcut()") - public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable { - ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); - HttpServletRequest request = attributes.getRequest(); - HttpServletResponse response = attributes.getResponse(); - - + @Around("@annotation(logInfo)") + public Object logAround(ProceedingJoinPoint joinPoint,org.nl.common.logging.annotation.Log logInfo) throws Throwable { MethodSignature signature = (MethodSignature) joinPoint.getSignature(); Method method = signature.getMethod(); - // 方法路径 - String methodName = joinPoint.getTarget().getClass().getName() + "." + signature.getName() + "()"; String params = getParameter(method, joinPoint.getArgs()); + HttpServletRequest request = RequestHolder.getHttpServletRequest(); + String url = request.getRequestURI(); + String requestIp = IPUtil.getIp(request); + MDC.put("requestMethod",url); + MDC.put("requestIp", requestIp); + MDC.put("requestTime", DateUtil.now()); + Object result = null; + long comming = System.currentTimeMillis(); + try { + log.info("[--request--][请求接口:{}][请求参数:{}]",url,params); + result = joinPoint.proceed(); + }catch (Exception ex){ - Object result; - currentTime.set(System.currentTimeMillis()); - result = joinPoint.proceed(); - SysLog log = new SysLog("INFO", System.currentTimeMillis() - currentTime.get()); - currentTime.remove(); - - logService.save(getUsername(), StringUtils.getBrowser(request), StringUtils.getIp(request), joinPoint, log); + StringBuffer errorStack = new StringBuffer(); + errorStack.append("
【异常堆栈:"); + String errorMsg = ex.getMessage(); + int x = 0; + StackTraceElement[] stackTrace = ex.getStackTrace(); + if (stackTrace!=null && stackTrace.length>0){ + for (StackTraceElement stack : stackTrace) { + x++;errorStack.append(stack.toString().replaceAll("<",">")).append("
"); + if (x>10){ break; } + } + } + log.error("[-requestError-][请求接口:{}]【异常信息:{}】[请求参数:{}] {}", url,errorMsg,params, errorStack.append("】").toString()); + throw ex; + }finally { + log.info("[--response--][请求接口:{} 执行结束][耗时:{}s]",url,(System.currentTimeMillis() - comming)/1000); + MDC.clear(); + } return result; } /** * 根据方法和传入的参数获取请求参数 */ - private String getParameter(Method method, Object[] args) { List argList = new ArrayList<>(); Parameter[] parameters = method.getParameters(); @@ -132,24 +121,7 @@ public class LogAspect { if (argList.size() == 0) { return ""; } - return argList.size() == 1 ? JSONUtil.toJsonStr(argList.get(0)) : JSONUtil.toJsonStr(argList); - } - - - /** - * 配置异常通知 - * - * @param joinPoint join point for advice - * @param e exception - */ - - @AfterThrowing(pointcut = "logPointcut()", throwing = "e") - public void logAfterThrowing(JoinPoint joinPoint, Throwable e) { - SysLog log = new SysLog("ERROR", System.currentTimeMillis() - currentTime.get()); - currentTime.remove(); - log.setException_detail(ThrowableUtil.getStackTrace(e).getBytes()); - HttpServletRequest request = RequestHolder.getHttpServletRequest(); - logService.save(getUsername(), StringUtils.getBrowser(request), StringUtils.getIp(request), (ProceedingJoinPoint) joinPoint, log); + return JSON.toJSONString(argList); } public String getUsername() { diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/common/mnt/util/ExecuteShellUtil.java b/nladmin-system/nlsso-server/src/main/java/org/nl/common/mnt/util/ExecuteShellUtil.java deleted file mode 100644 index cf5d26f..0000000 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/common/mnt/util/ExecuteShellUtil.java +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Copyright 2019-2020 Zheng Jie - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.nl.common.mnt.util; - -import cn.hutool.core.io.IoUtil; -import com.jcraft.jsch.ChannelShell; -import com.jcraft.jsch.JSch; -import com.jcraft.jsch.Session; -import lombok.extern.slf4j.Slf4j; - -import java.io.BufferedReader; -import java.io.InputStreamReader; -import java.io.PrintWriter; -import java.util.Vector; - -/** - * 执行shell命令 - * - * @author: ZhangHouYing - * @date: 2019/8/10 - */ -@Slf4j -public class ExecuteShellUtil { - - private Vector stdout; - - Session session; - - public ExecuteShellUtil(final String ipAddress, final String username, final String password,int port) { - try { - JSch jsch = new JSch(); - session = jsch.getSession(username, ipAddress, port); - session.setPassword(password); - session.setConfig("StrictHostKeyChecking", "no"); - session.connect(3000); - } catch (Exception e) { - log.error(e.getMessage(),e); - } - - } - - public int execute(final String command) { - int returnCode = 0; - ChannelShell channel = null; - PrintWriter printWriter = null; - BufferedReader input = null; - stdout = new Vector(); - try { - channel = (ChannelShell) session.openChannel("shell"); - channel.connect(); - input = new BufferedReader(new InputStreamReader(channel.getInputStream())); - printWriter = new PrintWriter(channel.getOutputStream()); - printWriter.println(command); - printWriter.println("exit"); - printWriter.flush(); - log.info("The remote command is: "); - String line; - while ((line = input.readLine()) != null) { - stdout.add(line); - System.out.println(line); - } - } catch (Exception e) { - log.error(e.getMessage(),e); - return -1; - }finally { - IoUtil.close(printWriter); - IoUtil.close(input); - if (channel != null) { - channel.disconnect(); - } - } - return returnCode; - } - - public void close(){ - if (session != null) { - session.disconnect(); - } - } - - public String executeForResult(String command) { - execute(command); - StringBuilder sb = new StringBuilder(); - for (String str : stdout) { - sb.append(str); - } - return sb.toString(); - } - -} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/common/security/config/ConfigBeanConfiguration.java b/nladmin-system/nlsso-server/src/main/java/org/nl/common/security/config/ConfigBeanConfiguration.java deleted file mode 100644 index 71493c6..0000000 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/common/security/config/ConfigBeanConfiguration.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright 2019-2020 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.nl.common.security.config; - -import org.nl.common.security.config.bean.LoginProperties; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -/** - * @apiNote 配置文件转换Pojo类的 统一配置 类 - * @author: liaojinlong - * @date: 2020/6/10 19:04 - */ -@Configuration -public class ConfigBeanConfiguration { - - @Bean - @ConfigurationProperties(prefix = "login", ignoreUnknownFields = true) - public LoginProperties loginProperties() { - return new LoginProperties(); - } - -} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/common/security/config/bean/LoginCodeEnum.java b/nladmin-system/nlsso-server/src/main/java/org/nl/common/security/config/bean/LoginCodeEnum.java deleted file mode 100644 index 29eae65..0000000 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/common/security/config/bean/LoginCodeEnum.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright 2019-2020 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.nl.common.security.config.bean; - -/** - * 验证码配置枚举 - * - * @author: liaojinlong - * @date: 2020/6/10 17:40 - */ - -public enum LoginCodeEnum { - /** - * 算数 - */ - arithmetic, - /** - * 中文 - */ - chinese, - /** - * 中文闪图 - */ - chinese_gif, - /** - * 闪图 - */ - gif, - spec -} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/common/security/satoken/SecurityProperties.java b/nladmin-system/nlsso-server/src/main/java/org/nl/common/security/satoken/SecurityProperties.java deleted file mode 100644 index 443f1c6..0000000 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/common/security/satoken/SecurityProperties.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.nl.common.security.satoken; - -import lombok.Data; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.stereotype.Component; - -/** - * @author: lyd - * @description: 白名单 - 统一放到yml管理 - * @Date: 2022/9/22 - */ -@Data -@Component -@ConfigurationProperties(prefix = "security") -public class SecurityProperties { - /** - * 排除路径 - */ - private String[] excludes; -} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/common/security/service/UserCacheClean.java b/nladmin-system/nlsso-server/src/main/java/org/nl/common/security/service/UserCacheClean.java deleted file mode 100644 index c16eed4..0000000 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/common/security/service/UserCacheClean.java +++ /dev/null @@ -1,49 +0,0 @@ -package org.nl.common.security.service;///* -// * Copyright 2019-2020 the original author or authors. -// * -// * Licensed under the Apache License, Version 2.0 (the "License"); -// * you may not use this file except in compliance with the License. -// * You may obtain a copy of the License at -// * -// * http://www.apache.org/licenses/LICENSE-2.0 -// * -// * Unless required by applicable law or agreed to in writing, software -// * distributed under the License is distributed on an "AS IS" BASIS, -// * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// * See the License for the specific language governing permissions and -// * limitations under the License. -// */ -// -//package org.nl.common.security.service; -// -//import cn.hutool.core.util.StrUtil; -//import org.springframework.stereotype.Component; -// -///** -// * @author: liaojinlong -// * @date: 2020/6/11 18:01 -// * @apiNote: 用于清理 用户登录信息缓存,为防止Spring循环依赖与安全考虑 ,单独构成工具类 -// */ -//@Component -//public class UserCacheClean { -// -// /** -// * 清理特定用户缓存信息
-// * 用户信息变更时 -// * -// * @param userName / -// */ -// public void cleanUserCache(String userName) { -// if (StrUtil.isNotEmpty(userName)) { -//// UserDetailsServiceImpl.userDtoCache.remove(userName); -// } -// } -// -// /** -// * 清理所有用户的缓存信息
-// * ,如发生角色授权信息变化,可以简便的全部失效缓存 -// */ -//// public void cleanAll() { -//// UserDetailsServiceImpl.userDtoCache.clear(); -//// } -//} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/common/utils/IPUtil.java b/nladmin-system/nlsso-server/src/main/java/org/nl/common/utils/IPUtil.java new file mode 100644 index 0000000..bb82737 --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/common/utils/IPUtil.java @@ -0,0 +1,97 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.common.utils; + +import lombok.extern.slf4j.Slf4j; + +import javax.servlet.http.HttpServletRequest; +import java.net.InetAddress; +import java.net.NetworkInterface; +import java.util.Enumeration; + +/** + * @author Zheng Jie + * 字符串工具类, 继承org.apache.commons.lang3.StringUtils类 + */ +@Slf4j +public class IPUtil { + + public static String IP = null; + /** + * 获取当前机器的IP + * + * @return / + */ + public static String getLocalIp() { + if (IP!=null){ + return IP; + } + try { + InetAddress candidateAddress = null; + // 遍历所有的网络接口 + for (Enumeration interfaces = NetworkInterface.getNetworkInterfaces(); interfaces.hasMoreElements();) { + NetworkInterface anInterface = interfaces.nextElement(); + // 在所有的接口下再遍历IP + for (Enumeration inetAddresses = anInterface.getInetAddresses(); inetAddresses.hasMoreElements();) { + InetAddress inetAddr = inetAddresses.nextElement(); + // 排除loopback类型地址 + if (!inetAddr.isLoopbackAddress()) { + if (inetAddr.isSiteLocalAddress()) { + // 如果是site-local地址,就是它了 + return inetAddr.getHostAddress(); + } else if (candidateAddress == null) { + // site-local类型的地址未被发现,先记录候选地址 + candidateAddress = inetAddr; + } + } + } + } + if (candidateAddress != null) { + return candidateAddress.getHostAddress(); + } + // 如果没有发现 non-loopback地址.只能用最次选的方案 + InetAddress jdkSuppliedAddress = InetAddress.getLocalHost(); + if (jdkSuppliedAddress == null) { + return ""; + } + IP = jdkSuppliedAddress.getHostAddress(); + return jdkSuppliedAddress.getHostAddress(); + } catch (Exception e) { + return ""; + } + } + 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 (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(); + } + + if (ip != null && ip.contains(",")) { + String[] ipArray = ip.split(","); + ip = ipArray[0]; + } + + return ip; + } +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/common/utils/RsaUtils.java b/nladmin-system/nlsso-server/src/main/java/org/nl/common/utils/RsaUtils.java index 96a88f8..9a73545 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/common/utils/RsaUtils.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/common/utils/RsaUtils.java @@ -1,6 +1,7 @@ package org.nl.common.utils; import org.apache.commons.codec.binary.Base64; +import org.nl.common.exception.BadRequestException; import javax.crypto.Cipher; import java.security.*; @@ -18,6 +19,8 @@ public class RsaUtils { private static final String SRC = "123456"; + public static final String KEY = "MIIBUwIBADANBgkqhkiG9w0BAQEFAASCAT0wggE5AgEAAkEA0vfvyTdGJkdbHkB8mp0f3FE0GYP3AYPaJF7jUd1M0XxFSE2ceK3k2kw20YvQ09NJKk+OMjWQl9WitG9pB6tSCQIDAQABAkA2SimBrWC2/wvauBuYqjCFwLvYiRYqZKThUS3MZlebXJiLB+Ue/gUifAAKIg1avttUZsHBHrop4qfJCwAI0+YRAiEA+W3NK/RaXtnRqmoUUkb59zsZUBLpvZgQPfj1MhyHDz0CIQDYhsAhPJ3mgS64NbUZmGWuuNKp5coY2GIj/zYDMJp6vQIgUueLFXv/eZ1ekgz2Oi67MNCk5jeTF2BurZqNLR3MSmUCIFT3Q6uHMtsB9Eha4u7hS31tj1UWE+D+ADzp59MGnoftAiBeHT7gDMuqeJHPL4b+kC+gzV4FGTfhR9q3tTbklZkD2A=="; + public static void main(String[] args) throws Exception { System.out.println("\n"); RsaKeyPair keyPair = generateKeyPair(); @@ -111,14 +114,18 @@ public class RsaUtils { * @return / * @throws Exception / */ - public static String decryptByPrivateKey(String privateKeyText, String text) throws Exception { - PKCS8EncodedKeySpec pkcs8EncodedKeySpec5 = new PKCS8EncodedKeySpec(Base64.decodeBase64(privateKeyText)); - KeyFactory keyFactory = KeyFactory.getInstance("RSA"); - PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec5); - Cipher cipher = Cipher.getInstance("RSA"); - cipher.init(Cipher.DECRYPT_MODE, privateKey); - byte[] result = cipher.doFinal(Base64.decodeBase64(text)); - return new String(result); + public static String decryptByPrivateKey(String privateKeyText, String text) { + try { + PKCS8EncodedKeySpec pkcs8EncodedKeySpec5 = new PKCS8EncodedKeySpec(Base64.decodeBase64(privateKeyText)); + KeyFactory keyFactory = KeyFactory.getInstance("RSA"); + PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec5); + Cipher cipher = Cipher.getInstance("RSA"); + cipher.init(Cipher.DECRYPT_MODE, privateKey); + byte[] result = cipher.doFinal(Base64.decodeBase64(text)); + return new String(result); + }catch (Exception ex){ + throw new BadRequestException(ex.getMessage()); + } } /** diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/common/utils/StringUtils.java b/nladmin-system/nlsso-server/src/main/java/org/nl/common/utils/StringUtils.java index 43f872b..78adf19 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/common/utils/StringUtils.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/common/utils/StringUtils.java @@ -19,8 +19,6 @@ import cn.hutool.http.HttpUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import lombok.extern.slf4j.Slf4j; -import net.dreamlu.mica.ip2region.core.Ip2regionSearcher; -import net.dreamlu.mica.ip2region.core.IpInfo; import org.nl.config.ElAdminProperties; import org.nl.config.SpringContextHolder; @@ -42,10 +40,6 @@ public class StringUtils { private static final char SEPARATOR = '_'; private static final String UNKNOWN = "unknown"; - /** - * 注入bean - */ - private final static Ip2regionSearcher IP_SEARCHER = SpringContextHolder.getBean(Ip2regionSearcher.class); /** @@ -192,14 +186,6 @@ public class StringUtils { /** * 根据ip获取详细地址 */ - public static String getLocalCityInfo(String ip) { - IpInfo ipInfo = IP_SEARCHER.memorySearch(ip); - if(ipInfo != null){ - return ipInfo.getAddress(); - } - return null; - - } //浏览器信息 public static String getBrowser(HttpServletRequest request) { return ""; diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/common/utils/ValidationUtil.java b/nladmin-system/nlsso-server/src/main/java/org/nl/common/utils/ValidationUtil.java index 7d3f97c..ad2e7dc 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/common/utils/ValidationUtil.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/common/utils/ValidationUtil.java @@ -16,7 +16,6 @@ package org.nl.common.utils; import cn.hutool.core.util.ObjectUtil; -import org.hibernate.validator.internal.constraintvalidators.hv.EmailValidator; import org.nl.common.exception.BadRequestException; import org.nl.config.language.LangProcess; @@ -40,6 +39,6 @@ public class ValidationUtil{ * 验证是否为邮箱 */ public static boolean isEmail(String email) { - return new EmailValidator().isValid(email, null); + return true; } } diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/config/AuditorConfig.java b/nladmin-system/nlsso-server/src/main/java/org/nl/config/AuditorConfig.java deleted file mode 100644 index 7ce0e4a..0000000 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/config/AuditorConfig.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright 2019-2020 Zheng Jie - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.nl.config; - -import org.springframework.data.domain.AuditorAware; -import org.springframework.stereotype.Component; - -import java.util.Optional; - -/** - * @description : 设置审计 - * @author : Dong ZhaoYang - * @date : 2019/10/28 - */ -@Component("auditorAware") -public class AuditorConfig implements AuditorAware { - - /** - * 返回操作员标志信息 - * - * @return / - */ - @Override - public Optional getCurrentAuditor() { - try { - // 这里应根据实际业务情况获取具体信息 - return Optional.of(null); - }catch (Exception ignored){} - // 用户定时任务,或者无Token调用的情况 - return Optional.of("System"); - } -} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/config/CustomJsonConfiguration.java b/nladmin-system/nlsso-server/src/main/java/org/nl/config/CustomJsonConfiguration.java deleted file mode 100644 index 5bcba43..0000000 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/config/CustomJsonConfiguration.java +++ /dev/null @@ -1,44 +0,0 @@ -package org.nl.config;/* -package org.nl.config; - -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.module.SimpleModule; -import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; -import org.springframework.context.annotation.Configuration; -import org.springframework.http.converter.HttpMessageConverter; -import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; -import org.springframework.web.servlet.config.annotation.EnableWebMvc; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; - -import java.util.List; - -*/ -/** - * 处理前端和后端Long类型失去精度问题. - * https://blog.51cto.com/u_15127549/3519757 - *//* - -@Configuration -@EnableWebMvc -public class CustomJsonConfiguration implements WebMvcConfigurer { - @Override - public void configureMessageConverters(List> converters) { - MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter(); - - ObjectMapper objectMapper = new ObjectMapper(); - */ -/** - * 序列换成json时,将所有的long变成string - * 因为js中得数字类型不能包含所有的java long值 - *//* - - SimpleModule simpleModule = new SimpleModule(); - simpleModule.addSerializer(Long.class, ToStringSerializer.instance); - simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance); - objectMapper.registerModule(simpleModule); - - jackson2HttpMessageConverter.setObjectMapper(objectMapper); - converters.add(jackson2HttpMessageConverter); - } -} -*/ diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/config/DataBaseConfig.java b/nladmin-system/nlsso-server/src/main/java/org/nl/config/DataBaseConfig.java deleted file mode 100644 index d3acc42..0000000 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/config/DataBaseConfig.java +++ /dev/null @@ -1,23 +0,0 @@ -//package org.nl.config; -// -//import com.alibaba.druid.pool.DruidDataSource; -//import lombok.extern.slf4j.Slf4j; -//import org.springframework.boot.context.properties.ConfigurationProperties; -//import org.springframework.context.annotation.Bean; -//import org.springframework.context.annotation.Configuration; -//import org.springframework.context.annotation.Primary; -// -//import javax.sql.DataSource; -// -//@Configuration -//@Slf4j -//public class DataBaseConfig { -// -// @Primary -// @Bean(name = "dataSource") -// @ConfigurationProperties(prefix = "spring.datasource.druid") -// public DataSource dataSource() { -// return new DruidDataSource(); -// } -// -//} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/config/Test.java b/nladmin-system/nlsso-server/src/main/java/org/nl/config/Test.java deleted file mode 100644 index cdcffb6..0000000 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/config/Test.java +++ /dev/null @@ -1,9 +0,0 @@ -package org.nl.config; - -/** - * @Author: lyd - * @Description: 测试 - * @Date: 2024/5/28 - */ -public class Test { -} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/config/jackson/BigNumberSerializer.java b/nladmin-system/nlsso-server/src/main/java/org/nl/config/jackson/BigNumberSerializer.java deleted file mode 100644 index ac3d8ef..0000000 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/config/jackson/BigNumberSerializer.java +++ /dev/null @@ -1,42 +0,0 @@ -package org.nl.config.jackson; - -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.databind.SerializerProvider; -import com.fasterxml.jackson.databind.annotation.JacksonStdImpl; -import com.fasterxml.jackson.databind.ser.std.NumberSerializer; - -import java.io.IOException; - -/** - * 超出 JS 最大最小值 处理 - * - * @author Lion Li - */ -@JacksonStdImpl -public class BigNumberSerializer extends NumberSerializer { - - /** - * 根据 JS Number.MAX_SAFE_INTEGER 与 Number.MIN_SAFE_INTEGER 得来 - */ - private static final long MAX_SAFE_INTEGER = 9007199254740991L; - private static final long MIN_SAFE_INTEGER = -9007199254740991L; - - /** - * 提供实例 - */ - public static final BigNumberSerializer INSTANCE = new BigNumberSerializer(Number.class); - - public BigNumberSerializer(Class rawType) { - super(rawType); - } - - @Override - public void serialize(Number value, JsonGenerator gen, SerializerProvider provider) throws IOException { - // 超出范围 序列化位字符串 - if (value.longValue() > MIN_SAFE_INTEGER && value.longValue() < MAX_SAFE_INTEGER) { - super.serialize(value, gen, provider); - } else { - gen.writeString(value.toString()); - } - } -} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/config/jackson/JacksonObjectMapper.java b/nladmin-system/nlsso-server/src/main/java/org/nl/config/jackson/JacksonObjectMapper.java deleted file mode 100644 index acb815d..0000000 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/config/jackson/JacksonObjectMapper.java +++ /dev/null @@ -1,70 +0,0 @@ -package org.nl.config.jackson; - -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.module.SimpleModule; -import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; -import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; -import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; -import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer; -import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer; -import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; -import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer; - -import java.math.BigInteger; -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.LocalTime; -import java.time.format.DateTimeFormatter; - -import static com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES; - -/** - *

- * 对象映射器:基于jackson将Java对象转为json,或者将json转为Java对象 - * 将JSON解析为Java对象的过程称为 [从JSON反序列化Java对象] - * 从Java对象生成JSON的过程称为 [序列化Java对象到JSON] - *

- * - * @author generator - * @since 2023-11-16 - */ -public class JacksonObjectMapper extends ObjectMapper { - - public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd"; - public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss"; - public static final String DEFAULT_TIME_FORMAT = "HH:mm:ss"; - - public JacksonObjectMapper() { - super(); - //收到未知属性时不报异常 - this.configure(FAIL_ON_UNKNOWN_PROPERTIES, false); - - //反序列化时,属性不存在的兼容处理 - this.getDeserializationConfig().withoutFeatures(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); - - SimpleModule simpleModule = new SimpleModule() - //将BigInteger型数字转换成字符串,避免丢失精度 - .addSerializer(BigInteger.class, ToStringSerializer.instance) - //将Long型数字转换成字符串,避免丢失精度 - .addSerializer(Long.class, ToStringSerializer.instance) - //将Integer型数字转换成字符串 - .addSerializer(Integer.class, ToStringSerializer.instance) - //将int型数字转换成字符串 - .addSerializer(int.class, ToStringSerializer.instance) - //将long型数字转换成字符串 - .addSerializer(long.class, ToStringSerializer.instance) - //序列化和反序列化日期格式 - .addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT))) - .addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT))) - .addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT))) - .addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT))) - .addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT))) - .addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT))); - - - //注册功能模块 例如,可以添加自定义序列化器和反序列化器 - this.registerModule(simpleModule); - } -} - diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/AsyncLuceneAppender.java b/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/AsyncLuceneAppender.java new file mode 100644 index 0000000..1c833b8 --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/AsyncLuceneAppender.java @@ -0,0 +1,32 @@ +package org.nl.config.lucene; +/** + * @author ldjun + * @version 1.0 + * @date 2023年08月24日 13:00 + * @desc desc + */ + +import ch.qos.logback.classic.spi.ILoggingEvent; +import com.yomahub.tlog.core.enhance.logback.async.AspectLogbackAsyncAppender; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.MDC; + +import java.util.Map; + +public class AsyncLuceneAppender extends AspectLogbackAsyncAppender { + + + + @Override + protected void append(ILoggingEvent event) { + String traceId = LuceneAppender.traceIdTL.get(); + if (StringUtils.isNotEmpty(traceId)){ + MDC.put("traceId",traceId); + Map mdcPropertyMap = event.getMDCPropertyMap(); + if (mdcPropertyMap.getClass().getName().contains("SynchronizedMap")){ + mdcPropertyMap.put("traceId",traceId); + } + MDC.clear(); + } + } +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/DynamicLogAppender.java b/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/DynamicLogAppender.java deleted file mode 100644 index 857eb8a..0000000 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/DynamicLogAppender.java +++ /dev/null @@ -1,58 +0,0 @@ -package org.nl.config.lucene; - -import ch.qos.logback.classic.LoggerContext; -import ch.qos.logback.classic.encoder.PatternLayoutEncoder; -import ch.qos.logback.core.rolling.RollingFileAppender; -import ch.qos.logback.core.rolling.TimeBasedRollingPolicy; -import cn.hutool.core.date.DateTime; -import cn.hutool.core.date.DateUtil; -import org.slf4j.LoggerFactory; - -import java.io.File; -import java.nio.charset.Charset; - -/** - *

- * 日志 - *

- * - * @author generator - * @since 2023-11-16 - */ -public class DynamicLogAppender { - /** - * 通过传入的动态名字,动态设置appender - * @param dynamicName - * @return - */ - public RollingFileAppender getAppender(String oldLogPath,String dynamicName) { - LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); - RollingFileAppender appender = new RollingFileAppender(); - //appender的name属性 - appender.setName(dynamicName); - appender.setContext(context); - - //设置文件名 - appender.setFile(new File(oldLogPath, dynamicName + "\\" + DateUtil.format(new DateTime(),"yyyy-MM-dd")+".log").getAbsolutePath()); - //设置日志文件输出格式 - PatternLayoutEncoder encoder = new PatternLayoutEncoder(); - encoder.setContext(context); - encoder.setPattern("%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"); - encoder.setCharset(Charset.forName("UTF-8")); - encoder.start(); - - //设置日志记录器的滚动策略 - TimeBasedRollingPolicy policy = new TimeBasedRollingPolicy(); - policy.setFileNamePattern(oldLogPath+dynamicName+".%d{yyyy-MM-dd}.log"); - //设置父节点是appender - policy.setParent(appender); - policy.setContext(context); - policy.start(); - - //加入下面两个节点 - appender.setRollingPolicy(policy); - appender.setEncoder(encoder); - appender.start(); - return appender; - } -} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/DynamicLogger.java b/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/DynamicLogger.java deleted file mode 100644 index 922d3b4..0000000 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/DynamicLogger.java +++ /dev/null @@ -1,53 +0,0 @@ -package org.nl.config.lucene; - -import ch.qos.logback.classic.Logger; -import ch.qos.logback.classic.LoggerContext; -import ch.qos.logback.core.rolling.RollingFileAppender; -import org.slf4j.LoggerFactory; - -import java.util.HashMap; -import java.util.Map; - -/** - *

- * 日志储存 - *

- * - * @author generator - * @since 2023-11-16 - */ -public class DynamicLogger { - /** - * 日志存储路径 - */ - String logPath; - public DynamicLogger(String logPath) { - this.logPath = logPath; - } - /** - * 对外暴露日志对象:每次拿的对象从内存里拿,没有再构建 - */ - private static Map container = new HashMap<>(); - public Logger getLogger(String dynamicName) { - Logger logger = container.get(dynamicName); - if(logger != null) { - return logger; - } - logger = build(dynamicName); - container.put(dynamicName,logger); - return logger; - } - - /** - * 构建Logger对象,给Logger指定appender - * @param dynamicName / - * @return Logger - */ - private Logger build(String dynamicName) { - RollingFileAppender runTaskAppender =new DynamicLogAppender().getAppender(this.logPath,dynamicName); - LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); - Logger logger = context.getLogger(dynamicName); - logger.addAppender(runTaskAppender); - return logger; - } -} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/Indexer.java b/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/Indexer.java deleted file mode 100644 index 64895ee..0000000 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/Indexer.java +++ /dev/null @@ -1,187 +0,0 @@ -package org.nl.config.lucene; - -import com.alibaba.fastjson.JSONObject; -import org.apache.commons.io.FileUtils; -import org.apache.lucene.analysis.Analyzer; -import org.apache.lucene.document.Document; -import org.apache.lucene.document.Field; -import org.apache.lucene.document.TextField; -import org.apache.lucene.index.IndexWriter; -import org.apache.lucene.index.IndexWriterConfig; -import org.apache.lucene.store.Directory; -import org.apache.lucene.store.FSDirectory; -import org.springframework.beans.factory.annotation.Value; -import org.wltea.analyzer.lucene.IKAnalyzer; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; -import java.io.IOException; -import java.nio.file.Paths; -import java.util.Set; - -/** - *

- * lucene索引器 - *

- * - * @author generator - * @since 2023-11-16 - */ -public class Indexer { - /** - * 写索引实例 - */ - private IndexWriter writer; - - public IndexWriter getWriter() { - return writer; - } - - /** - * 构造方法,实例化IndexWriter - * - * @param indexDir - * @throws Exception - */ - public Indexer(String indexDir) throws Exception { - Directory dir = FSDirectory.open(Paths.get(indexDir)); - //标准分词器,会自动去掉空格啊,is a the等单词 -// Analyzer analyzer = new StandardAnalyzer(); - Analyzer analyzer = new IKAnalyzer(); - //将标准分词器配到写索引的配置中 - IndexWriterConfig config = new IndexWriterConfig(analyzer); - //实例化写索引对象 - writer = new IndexWriter(dir, config); - } - - /** - * 索引指定目录下的所有文件 - * - * @param dataDir - * @return - * @throws Exception - */ - public int indexAll(String dataDir) throws Exception { - // 获取该路径下的所有文件 - File[] files = new File(dataDir).listFiles(); - if (null != files) { - for (File file : files) { - //调用下面的indexFile方法,对每个文件进行索引 - indexFile(file); - } - } - //返回索引的文件数 - return writer.numRamDocs(); - } - - /** - * 索引指定的文件 - * - * @param file - * @throws Exception - */ - private void indexFile(File file) throws Exception { - System.out.println("索引文件的路径:" + file.getCanonicalPath()); - //调用下面的getDocument方法,获取该文件的document - Document doc = getDocument(file); - //添加索引文档 - //Document doc = json2Doc(jsonDoc); -// Document doc = new Document(); - Field fieldContent = new TextField("fieldContent", FileUtils.readFileToString(null, "UTF-8"), Field.Store.YES); - - //将doc添加到索引中 - writer.addDocument(doc); - } - - /** - * 获取文档,文档里再设置每个字段,就类似于数据库中的一行记录 - * - * @param file - * @return - * @throws Exception - */ - private Document getDocument(File file) throws Exception { - Document doc = new Document(); - //开始添加字段 - //添加内容 - doc.add(new TextField("contents", new FileReader(file))); - //添加文件名,并把这个字段存到索引文件里 - doc.add(new TextField("fileName", file.getName(), Field.Store.YES)); - //添加文件路径 - doc.add(new TextField("fullPath", file.getCanonicalPath(), Field.Store.YES)); - return doc; - } - - public Document json2Doc(String strDoc) { - Document doc = new Document(); - JSONObject jsonDoc = JSONObject.parseObject(strDoc); - Set keys = jsonDoc.keySet(); - for (String key : keys) { - doc.add(new TextField(key, jsonDoc.getString(key), Field.Store.YES)); - } - return doc; - } - - public void addLogIndex(String msg) throws IOException { - //步骤一:创建Directory对象,用于指定索引库的位置 RAMDirectory内存 - Directory directory = FSDirectory.open(new File("D:\\lucene\\index").toPath()); - //步骤二:创建一个IndexWriter对象,用于写索引 -// Analyzer analyzer = new StandardAnalyzer(); - IndexWriter indexWriter = new IndexWriter(directory, new IndexWriterConfig(new IKAnalyzer(false))); -// indexWriter.deleteAll();//清理所有索引库 -// IndexWriter indexWriter=new IndexWriter(directory,new IndexWriterConfig(new StandardAnalyzer())); - //记录索引开始时间 - long startTime = System.currentTimeMillis(); - //步骤三:读取磁盘中文件,对应每一个文件创建一个文档对象 - Document document = new Document(); - document.add(new TextField("fieldContent", msg, Field.Store.YES)); - indexWriter.addDocument(document); - //记录索引结束时间 - long endTime = System.currentTimeMillis(); - System.out.println("建立索引" + "共耗时" + (endTime - startTime) + "毫秒"); - indexWriter.commit(); - //步骤八:关闭资源 - indexWriter.close(); - System.out.println("建立索引成功-----关闭资源"); - } - - /** - * 系统的日志文件路径 - */ - @Value("${logging.file.path}") - private String logUrl; - - public static void main(String[] args) throws IOException { - //步骤一:创建Directory对象,用于指定索引库的位置 RAMDirectory内存 - Directory directory = FSDirectory.open(new File("D:\\lucene\\index").toPath()); - //步骤二:创建一个IndexWriter对象,用于写索引 -// Analyzer analyzer = new StandardAnalyzer(); - IndexWriter indexWriter = new IndexWriter(directory, new IndexWriterConfig(new IKAnalyzer(false))); - - indexWriter.deleteAll();//清理所有索引库 -// indexWriter=new IndexWriter(directory,new IndexWriterConfig(new StandardAnalyzer())); - //记录索引开始时间 - long startTime = System.currentTimeMillis(); - //步骤三:读取磁盘中文件,对应每一个文件创建一个文档对象 - File file = new File("D:\\testlog"); - //步骤四:获取文件列表 - File[] files = file.listFiles(); - for (File item : files) { - BufferedReader bufferedReader = new BufferedReader(new FileReader(item)); - String strLine = null; - while (null != (strLine = bufferedReader.readLine())) { - Document document = new Document(); - document.add(new TextField("fieldContent", strLine, Field.Store.YES)); - indexWriter.addDocument(document); - } - } - //记录索引结束时间 - long endTime = System.currentTimeMillis(); - System.out.println("建立索引" + "共耗时" + (endTime - startTime) + "毫秒"); - indexWriter.commit(); - //步骤八:关闭资源 - indexWriter.close(); - System.out.println("建立索引成功-----关闭资源"); - } -} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/LogMessageConstant.java b/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/LogMessageConstant.java index 7c42750..14ddcca 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/LogMessageConstant.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/LogMessageConstant.java @@ -6,86 +6,41 @@ package org.nl.config.lucene; * @Date: 2023/8/25 */ public class LogMessageConstant { - /** - * 标签 - */ - public final static String FIELD_LABEL = "label"; - /** - * 时间 - */ - public final static String FIELD_SORT_NAME = "time"; - /** - * IP - */ - public final static String FIELD_IP = "ip"; - /** - * 级别 - */ + /** */ + public final static String SORT_NAME = "time"; + /** 级别 */ public final static String FIELD_LEVEL = "level"; - /** - * 时间 - */ + /** 时间 */ public final static String FIELD_TIMESTAMP = "timestamp"; - /** - * 类的限定名 - */ + /** 类的限定名 */ public final static String FIELD_CLASS_NAME = "logger"; - /** - * 线程名 - */ + /** 线程名 */ public final static String FIELD_THREAD = "thread"; - /** - * 日志内容 - */ + /** 日志内容 */ public final static String FIELD_MESSAGE = "message"; - /** - * tlogTraceId - */ public final static String FIELD_TRACEID = "tlogTraceId"; // 定义颜色值 - /** - * 文本颜色:黑色 - */ + /** 文本颜色:黑色 */ public final static String COLOR_BLACK = "\u001B[30m"; - /** - * 文本颜色:红色 - */ + /** 文本颜色:红色 */ public final static String COLOR_RED = "\u001B[31m"; - /** - * 文本颜色:绿色 - */ + /** 文本颜色:绿色 */ public final static String COLOR_GREEN = "\u001B[32m"; - /** - * 文本颜色:黄色 - */ + /** 文本颜色:黄色 */ public final static String COLOR_YELLOW = "\u001B[33m"; - /** - * 文本颜色:蓝色 - */ + /** 文本颜色:蓝色 */ public final static String COLOR_BLUE = "\u001B[34m"; - /** - * 文本颜色:品红色 - */ + /** 文本颜色:品红色 */ public final static String COLOR_MAGENTA = "\u001B[35m"; - /** - * 文本颜色:青色 - */ + /** 文本颜色:青色 */ public final static String COLOR_CYAN = "\u001B[36m"; - /** - * 文本颜色:白色 - */ + /** 文本颜色:白色 */ public final static String COLOR_WHITE = "\u001B[37m"; - /** - * 文本颜色重置 - */ + /** 文本颜色重置 */ public final static String COLOR_RESET = "\u001B[0m"; - /** - * 背景颜色:黄色 - */ + /** 背景颜色:黄色 */ public final static String BACKGROUND_YELLOW = "\u001B[43m"; - /** - * 索引路径 - */ - public final static String INDEX_DIR = "D:\\software\\lucene\\index"; + /** 索引路径 */ + public final static String INDEX_DIR = "E:\\lucene\\index"; } diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/LuceneAppender.java b/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/LuceneAppender.java index d342c3a..a4c204a 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/LuceneAppender.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/LuceneAppender.java @@ -8,8 +8,8 @@ package org.nl.config.lucene; import ch.qos.logback.classic.spi.ILoggingEvent; import ch.qos.logback.core.AppenderBase; -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.ObjectUtil; +import com.alibaba.ttl.TransmittableThreadLocal; +import org.apache.commons.lang3.StringUtils; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.document.*; import org.apache.lucene.index.IndexWriter; @@ -20,20 +20,21 @@ import org.nl.common.utils.YmlConfigFileUtil; import org.wltea.analyzer.lucene.IKAnalyzer; import java.io.IOException; -import java.net.InetAddress; -import java.net.UnknownHostException; import java.nio.file.Paths; +import java.util.List; import java.util.Map; import java.util.Properties; -import java.util.regex.Matcher; -import java.util.regex.Pattern; public class LuceneAppender extends AppenderBase { - private Directory index; + public static final TransmittableThreadLocal traceIdTL = new TransmittableThreadLocal(); + public LuceneProperties properties; + public static Directory index; + private List encoders; public static IndexWriter indexWriter; + @Override public void start() { super.start(); @@ -43,17 +44,13 @@ public class LuceneAppender extends AppenderBase { // 获取配置值 String luceneDir = properties.getProperty("lucene.index.path"); + System.out.println("---index地址----"+luceneDir); index = FSDirectory.open(Paths.get(luceneDir)); - } catch (IOException e) { - e.printStackTrace(); - } - - // 初始化 Lucene 索引 - Analyzer analyzer = new IKAnalyzer(); - IndexWriterConfig config = new IndexWriterConfig(analyzer); - try { + // 初始化 Lucene 索引 + Analyzer analyzer = new IKAnalyzer(); + IndexWriterConfig config = new IndexWriterConfig(analyzer); indexWriter = new IndexWriter(index, config); - } catch (IOException e) { + } catch (Exception e) { e.printStackTrace(); } } @@ -61,53 +58,26 @@ public class LuceneAppender extends AppenderBase { @Override protected void append(ILoggingEvent event) { - String message = event.getFormattedMessage(); - Map mdcPropertyMap = event.getMDCPropertyMap(); Document doc = new Document(); - long timeStamp = event.getTimeStamp(); - // 获取本机的IP地址 - String ipAddress = "-"; - try { - ipAddress = InetAddress.getLocalHost().getHostAddress(); - } catch (UnknownHostException e) { - throw new RuntimeException(e); + for (Property property : this.properties.getProperties()) { + LucenePropertyAndEncoder encoder = new LucenePropertyAndEncoder(property, this.context); + String encode = encoder.encode(event); + doc.add(new StringField(property.getName(), encode, Field.Store.YES)); } - String formattedDateTime = DateUtil.format(new java.util.Date(timeStamp), "yyyy-MM-dd HH:mm:ss.SSS"); - doc.add(new LongPoint(LogMessageConstant.FIELD_SORT_NAME, timeStamp)); - doc.add(new NumericDocValuesField(LogMessageConstant.FIELD_SORT_NAME, timeStamp)); - doc.add(new StringField(LogMessageConstant.FIELD_LEVEL, event.getLevel().toString(), Field.Store.YES)); - doc.add(new StringField(LogMessageConstant.FIELD_TIMESTAMP, formattedDateTime, Field.Store.YES)); - doc.add(new StoredField(LogMessageConstant.FIELD_CLASS_NAME, event.getLoggerName())); - doc.add(new StoredField(LogMessageConstant.FIELD_IP, ipAddress)); - doc.add(new StoredField(LogMessageConstant.FIELD_THREAD, event.getThreadName())); - if (ObjectUtil.isNotEmpty(mdcPropertyMap) && ObjectUtil.isNotEmpty(mdcPropertyMap.get(LogMessageConstant.FIELD_TRACEID))) { - String traceId = mdcPropertyMap.get(LogMessageConstant.FIELD_TRACEID); - doc.add(new StringField(LogMessageConstant.FIELD_TRACEID, traceId, Field.Store.YES)); - doc.add(new StringField(LogMessageConstant.FIELD_LABEL, ObjectUtil.isNotEmpty(mdcPropertyMap.get("tag_name")) - ? mdcPropertyMap.get("tag_name") : "-", Field.Store.YES)); - } else { - // 定义正则表达式,匹配17位数字 - String regex = "\\d{17}"; - // 创建 Pattern 对象 - Pattern pattern = Pattern.compile(regex); - // 创建 Matcher 对象 - Matcher matcher = pattern.matcher(message); - String matchedNumber = null; - // 查找匹配的数字 - while (matcher.find()) { - matchedNumber = matcher.group(); - } - if (ObjectUtil.isNotEmpty(matchedNumber)) { - doc.add(new StringField(LogMessageConstant.FIELD_TRACEID, matchedNumber, Field.Store.YES)); - } else { - doc.add(new StringField(LogMessageConstant.FIELD_TRACEID, "无生成链路ID", Field.Store.YES)); - } + Map map = event.getMDCPropertyMap(); + if (!map.isEmpty() && StringUtils.isNotEmpty(map.get("traceId"))){ + doc.add(new StringField("traceId",map.get("traceId"), Field.Store.YES)); + }else { + doc.add(new StringField("traceId"," ", Field.Store.YES)); } - doc.add(new TextField(LogMessageConstant.FIELD_MESSAGE, message, Field.Store.YES)); + + doc.add(new TextField(LogMessageConstant.FIELD_MESSAGE, event.getFormattedMessage(), Field.Store.YES)); + doc.add(new StringField(LogMessageConstant.FIELD_TIMESTAMP, String.valueOf(event.getTimeStamp()),Field.Store.YES)); + doc.add(new NumericDocValuesField(LogMessageConstant.SORT_NAME, event.getTimeStamp())); try { indexWriter.addDocument(doc); indexWriter.commit(); - } catch (IOException e) { + } catch (Exception e) { e.printStackTrace(); } } @@ -121,4 +91,9 @@ public class LuceneAppender extends AppenderBase { e.printStackTrace(); } } + + public void setProperties(LuceneProperties properties) { + this.properties = properties; + + } } diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/LuceneIndexWriter.java b/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/LuceneIndexWriter.java deleted file mode 100644 index 0e9fdb6..0000000 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/LuceneIndexWriter.java +++ /dev/null @@ -1,70 +0,0 @@ -package org.nl.config.lucene; - -import cn.hutool.core.date.DateUtil; -import org.apache.lucene.index.CorruptIndexException; -import org.apache.lucene.index.IndexWriter; -import org.apache.lucene.index.IndexWriterConfig; -import org.apache.lucene.store.Directory; -import org.apache.lucene.store.FSDirectory; -import org.wltea.analyzer.lucene.IKAnalyzer; - -import java.io.File; -import java.io.IOException; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Date; - -/** - *

- * 、 - *

- * - * @author generator - * @since 2023-11-16 - */ -public class LuceneIndexWriter { - private static IndexWriter indexWriter; - - static { - try { - Directory directory = FSDirectory.open(new File(UrlConfig.luceneUrl).toPath()); - IndexWriterConfig config = new IndexWriterConfig(new IKAnalyzer()); - indexWriter = new IndexWriter(directory, config); - } catch (Exception e) { - e.printStackTrace(); - } - /**当当前线程结束时,自动关闭IndexWriter,使用Runtime对象*/ - Runtime.getRuntime().addShutdownHook(new Thread(() -> { - try { - closeIndexWriter(); - } catch (Exception e) { - e.printStackTrace(); - } - })); - } - /**在线程结束时,自动关闭IndexWriter*/ - public static IndexWriter getIndexWriter() { - return indexWriter; - } - /**关闭IndexWriter - * @throws IOException - * @throws CorruptIndexException */ - public static void closeIndexWriter() throws Exception { - if(indexWriter != null) { - indexWriter.close(); - } - } - - public static void main(String[] args) throws IOException { - indexWriter.deleteAll(); - } - - public static String getDate(String timeString) throws ParseException { - //时间格式 - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSX"); - Date date = sdf.parse(timeString); - //格式化后的时间 - timeString = DateUtil.format(date, "yyyy-MM-dd HH:mm:ss.SSS"); - return timeString; - } -} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/LuceneProperties.java b/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/LuceneProperties.java new file mode 100644 index 0000000..c044227 --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/LuceneProperties.java @@ -0,0 +1,23 @@ +package org.nl.config.lucene; + + +import java.util.ArrayList; +import java.util.List; + +public class LuceneProperties { + + private List properties; + + public LuceneProperties() { + this.properties = new ArrayList(); + } + + public List getProperties() { + return properties; + } + + public void addProperty(Property property) { + properties.add(property); + } + +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/LucenePropertyAndEncoder.java b/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/LucenePropertyAndEncoder.java new file mode 100644 index 0000000..7ad3ecf --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/LucenePropertyAndEncoder.java @@ -0,0 +1,38 @@ +package org.nl.config.lucene; + +import ch.qos.logback.classic.PatternLayout; +import ch.qos.logback.classic.spi.ILoggingEvent; +import ch.qos.logback.core.Context; +import ch.qos.logback.core.pattern.PatternLayoutBase; + +/* + * @author ZZQ + * @Date 2023/12/22 18:11 + */ +public class LucenePropertyAndEncoder { + + private Property property; + + private PatternLayoutBase layout = new PatternLayout(); + + public LucenePropertyAndEncoder(Property property, Context context) { + this.property = property; + this.layout.setContext(context); + this.layout.setPattern(String.valueOf(property.getValue())); + this.layout.setPostCompileProcessor(null); + this.layout.start(); + } + + public String encode(ILoggingEvent event) { + return layout.doLayout(event); + } + + public String getName() { + return property.getName(); + } + + public boolean allowEmpty() { + return property.isAllowEmpty(); + } +} + diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/Property.java b/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/Property.java new file mode 100644 index 0000000..4d33144 --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/Property.java @@ -0,0 +1,44 @@ +package org.nl.config.lucene; + +/* + * @author ZZQ + * @Date 2023/12/26 15:30 + */ +public class Property { + private String name; + private String value; + private boolean allowEmpty; + + public Property() { + } + + public Property(String name, String value, boolean allowEmpty) { + this.name = name; + this.value = value; + this.allowEmpty = allowEmpty; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + public boolean isAllowEmpty() { + return allowEmpty; + } + + public void setAllowEmpty(boolean allowEmpty) { + this.allowEmpty = allowEmpty; + } +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/Searcher.java b/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/Searcher.java deleted file mode 100644 index 45b867e..0000000 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/Searcher.java +++ /dev/null @@ -1,163 +0,0 @@ -package org.nl.config.lucene; - -import cn.hutool.core.date.DateTime; -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.ObjectUtil; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import lombok.extern.slf4j.Slf4j; -import org.apache.lucene.analysis.Analyzer; -import org.apache.lucene.document.Document; -import org.apache.lucene.index.DirectoryReader; -import org.apache.lucene.index.IndexReader; -import org.apache.lucene.index.Term; -import org.apache.lucene.queryparser.classic.QueryParser; -import org.apache.lucene.search.*; -import org.apache.lucene.store.Directory; -import org.apache.lucene.store.FSDirectory; -import org.apache.lucene.util.BytesRef; -import org.wltea.analyzer.lucene.IKAnalyzer; - -import java.io.IOException; -import java.nio.file.Paths; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.time.temporal.ChronoUnit; -import java.util.*; - -/** - * lucene查询器 - */ -@Slf4j -public class Searcher { - - public static Map search(String indexDir, JSONObject whereJson) throws Exception { - //获取要查询的路径,也就是索引所在的位置 - Directory dir = FSDirectory.open(Paths.get(indexDir)); - IndexReader reader = DirectoryReader.open(dir); - //构建IndexSearcher - IndexSearcher searcher = new IndexSearcher(reader); - //标准分词器,会自动去掉空格啊,is a the等单词 - Analyzer analyzer = new IKAnalyzer(true); - - // 实际上Lucene本身不支持分页。因此我们需要自己进行逻辑分页。我们要准备分页参数: - // 每页条数 - int pageSize = Integer.parseInt(whereJson.get("size").toString()); - // 当前页码 - int pageNum = Integer.parseInt(whereJson.get("page").toString()) - 1; - // 当前页的起始条数 - int start = pageNum * pageSize; - // 当前页的结束条数(不能包含) - int end = start + pageSize; - // 创建排序对象,需要排序字段SortField,参数:字段的名称、字段的类型、是否反转如果是false,升序。true降序 - Sort sort = new Sort(new SortField(LogMessageConstant.FIELD_SORT_NAME, SortField.Type.LONG, true)); - - TopDocs docs = null; - BooleanQuery.Builder booleanQueryBuilder = new BooleanQuery.Builder(); - Calendar calendar = Calendar.getInstance(); - calendar.set(1970, 0, 1); - //时间范围查询 - JSONArray createTime = whereJson.getJSONArray("createTime"); - String startDate = DateUtil.format(calendar.getTime(), "yyyy-MM-dd HH:mm:ss.SSS"); - String endDate = DateUtil.format(new DateTime(), "yyyy-MM-dd HH:mm:ss.SSS"); - - if (createTime != null) { - startDate = createTime.getString(0); - endDate = createTime.getString(1); - } - // 字段之间的与或非关系,MUST表示and,MUST_NOT表示not,SHOULD表示or,有几个fields就必须有几个clauses - TermRangeQuery termRangeQuery = new TermRangeQuery("timestamp", new BytesRef(startDate), - new BytesRef(endDate), true, true); - booleanQueryBuilder.add(termRangeQuery, BooleanClause.Occur.MUST); - if (ObjectUtil.isNotEmpty(whereJson.get(LogMessageConstant.FIELD_MESSAGE))) { - //查询解析器 - QueryParser queryParser = new QueryParser("message", analyzer); - Query query = queryParser.parse("message:" + whereJson.getString("message") + "~"); - booleanQueryBuilder.add(query, BooleanClause.Occur.MUST); - } - if (ObjectUtil.isNotEmpty(whereJson.get(LogMessageConstant.FIELD_TRACEID))) { - //查询解析器 - TermQuery termQuery = new TermQuery(new Term(LogMessageConstant.FIELD_TRACEID, - whereJson.getString(LogMessageConstant.FIELD_TRACEID).trim())); - booleanQueryBuilder.add(termQuery, BooleanClause.Occur.MUST); - } - if (ObjectUtil.isNotEmpty(whereJson.get(LogMessageConstant.FIELD_LABEL))) { - //查询解析器 - TermQuery termQuery = new TermQuery(new Term(LogMessageConstant.FIELD_LABEL, - whereJson.getString(LogMessageConstant.FIELD_LABEL).trim())); - booleanQueryBuilder.add(termQuery, BooleanClause.Occur.MUST); - } - if (ObjectUtil.isNotEmpty(whereJson.get(LogMessageConstant.FIELD_LEVEL))) { - //查询解析器 - TermQuery termQuery = new TermQuery(new Term(LogMessageConstant.FIELD_LEVEL, - whereJson.get(LogMessageConstant.FIELD_LEVEL).toString())); - booleanQueryBuilder.add(termQuery, BooleanClause.Occur.MUST); - } - List list = new ArrayList<>(); - TopFieldCollector collector = TopFieldCollector.create(sort, 20000, 0); - searcher.search(booleanQueryBuilder.build(), collector); - docs = collector.topDocs(pageNum*pageSize, pageSize); - ScoreDoc[] scoreDocs = docs.scoreDocs; - int totalSize = collector.getTotalHits(); - - for (ScoreDoc scoreDoc : scoreDocs) { - Document doc = reader.document(scoreDoc.doc); - String logInfo = LogMessageConstant.COLOR_RED + doc.get(LogMessageConstant.FIELD_TIMESTAMP) + - LogMessageConstant.COLOR_RESET + " - " + - LogMessageConstant.COLOR_BLUE + doc.get(LogMessageConstant.FIELD_IP) + - LogMessageConstant.COLOR_RESET + " - " + - LogMessageConstant.COLOR_GREEN + "[" + doc.get(LogMessageConstant.FIELD_THREAD) + "]" + - LogMessageConstant.COLOR_RESET + " - " + - LogMessageConstant.COLOR_BLACK + doc.get(LogMessageConstant.FIELD_LEVEL) + - LogMessageConstant.COLOR_RESET + " - " + - LogMessageConstant.COLOR_MAGENTA + doc.get(LogMessageConstant.FIELD_CLASS_NAME) + - LogMessageConstant.COLOR_RESET + " - " + - LogMessageConstant.COLOR_GREEN + "<" + doc.get(LogMessageConstant.FIELD_TRACEID) + ">" + - LogMessageConstant.COLOR_RESET + " - " + - LogMessageConstant.COLOR_BLACK + highlightKeyword(doc.get(LogMessageConstant.FIELD_MESSAGE), whereJson.getString("message")); - list.add(logInfo); - } - reader.close(); - JSONObject jo = new JSONObject(); - jo.put("content", list); - jo.put("totalElements", totalSize); - return jo; - } - - public static String highlightKeyword(String text, String keyword) { - if (ObjectUtil.isEmpty(keyword)) { - return text; - } - - int startIndex = text.indexOf(keyword); - if (startIndex != -1) { - int endIndex = startIndex + keyword.length(); - String beforeKeyword = text.substring(0, startIndex); - String afterKeyword = text.substring(endIndex); - String highlightedKeyword = LogMessageConstant.BACKGROUND_YELLOW + keyword + LogMessageConstant.COLOR_RESET - + LogMessageConstant.COLOR_BLACK; - return beforeKeyword + highlightedKeyword + afterKeyword; - } else { - return text; - } - } - - public static void main(String[] args) throws IOException, ParseException { - // 获取当前时间 - LocalDateTime now = LocalDateTime.now(); - // 减去七天 - LocalDateTime sevenDaysAgo = now.minus(7, ChronoUnit.DAYS); - // 转换为 Date 类型 - Date sevenDaysAgoDate = Date.from(sevenDaysAgo.atZone(ZoneId.systemDefault()).toInstant()); - // 获取时间戳 - SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS"); - Date date = dateFormat.parse(String.valueOf(sevenDaysAgo)); - long timestamp = date.getTime(); - System.out.println(now); - System.out.println(sevenDaysAgo); - System.out.println(sevenDaysAgoDate); - System.out.println(timestamp); - } -} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/StaticConfig.java b/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/StaticConfig.java deleted file mode 100644 index 0146ff4..0000000 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/StaticConfig.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.nl.config.lucene; - -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -/** - *

- * 设置静态参数初始化 - *

- * - * @author generator - * @since 2023-11-16 - */ -@Configuration -public class StaticConfig { - /** - * 日志索引目录 - */ - @Value("${lucene.index.path}") - private String luceneDir; - - @Bean - public int initStatic() { - UrlConfig.setLuceneUrl(luceneDir); - return 0; - } -} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/TagNameEnum.java b/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/TagNameEnum.java deleted file mode 100644 index 2dd161c..0000000 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/TagNameEnum.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.nl.config.lucene; - -import lombok.AllArgsConstructor; -import lombok.Getter; - -/** - * @Author: lyd - * @Description: 日志标签枚举 - * @Date: 2023/12/28 - */ -@Getter -@AllArgsConstructor -public enum TagNameEnum { - /** - * LMS系统 - */ - LMS("LMS系统"), - /** - * 标记符号 - */ - MARK_SYMBOL("-"); - private final String tag; -} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/UrlConfig.java b/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/UrlConfig.java deleted file mode 100644 index 2ebb250..0000000 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/config/lucene/UrlConfig.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.nl.config.lucene; - -/** - *

- * url - *

- * - * @author generator - * @since 2023-11-16 - */ -public class UrlConfig { - public static String luceneUrl; - - public static String getLuceneUrl() { - return luceneUrl; - } - - public static void setLuceneUrl(String luceneUrl) { - UrlConfig.luceneUrl = luceneUrl; - } -} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/config/mybatis/CustomIdGenerator.java b/nladmin-system/nlsso-server/src/main/java/org/nl/config/mybatis/CustomIdGenerator.java deleted file mode 100644 index bb53c71..0000000 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/config/mybatis/CustomIdGenerator.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.nl.config.mybatis; - -import cn.hutool.core.util.IdUtil; -import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator; -import org.springframework.stereotype.Component; - -/** - * @Author: lyd - * @Description: ID自动生成策略 - * @Date: 2023/5/4 - */ -@Component -public class CustomIdGenerator implements IdentifierGenerator { - @Override - public Number nextId(Object entity) { - return IdUtil.getSnowflake(1,1).nextId(); - } -} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/config/mybatis/DruidFilter.java b/nladmin-system/nlsso-server/src/main/java/org/nl/config/mybatis/DruidFilter.java new file mode 100644 index 0000000..cb3739a --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/config/mybatis/DruidFilter.java @@ -0,0 +1,91 @@ +package org.nl.config.mybatis; + +import com.alibaba.druid.filter.FilterChain; +import com.alibaba.druid.filter.FilterEventAdapter; +import com.alibaba.druid.proxy.jdbc.JdbcParameter; +import com.alibaba.druid.proxy.jdbc.PreparedStatementProxy; +import com.alibaba.druid.proxy.jdbc.ResultSetProxy; +import com.alibaba.druid.proxy.jdbc.StatementProxy; +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.util.JdbcUtils; +import com.mysql.cj.jdbc.result.ResultSetImpl; +import lombok.extern.slf4j.Slf4j; + +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +/* + * @author ZZQ + * @Date 2023/2/10 11:27 上午 + */ +@Slf4j +public class DruidFilter extends FilterEventAdapter { + + @Override + public int preparedStatement_executeUpdate(FilterChain chain, PreparedStatementProxy statement) throws SQLException { + + return super.preparedStatement_executeUpdate(chain, statement); + } + + @Override + public int statement_executeUpdate(FilterChain chain, StatementProxy statement, String sql) throws SQLException { + + return super.statement_executeUpdate(chain, statement, sql); + } + + @Override + protected void statementExecuteAfter(StatementProxy statement, String sql, boolean result) { + int size = statement.getParametersSize(); + String executeSql = sql; + int count = 0; + try { + count=statement.getUpdateCount(); + }catch (Exception ex){ } + if (count>0) { + if (size > 0) { + Collection values = statement.getParameters().values(); + List params = new ArrayList<>(); + for (JdbcParameter value : values) { + params.add(value.getValue()); + } + executeSql = SQLUtils.format(executeSql, JdbcUtils.MYSQL, params); + } + log.info("[----SQL----][update][ SQL: {} ]", executeSql); + } + super.statementExecuteAfter(statement, sql, result); + } + @Override + public ResultSetProxy statement_getResultSet(FilterChain chain, StatementProxy statement) throws SQLException { + ResultSetProxy rs = super.statement_getResultSet(chain, statement); + String executeSql = statement.getLastExecuteSql(); + if (true){ + int result = 0; + if (rs != null) { + ResultSetImpl rss = rs.getResultSetRaw().unwrap(ResultSetImpl.class); + result = rss.getRows().size(); + } + try { + int size = statement.getParametersSize(); + if (size>0){ + Collection values = statement.getParameters().values(); + List params = new ArrayList<>(); + for (JdbcParameter value : values) { + params.add(value.getValue()); + } + executeSql = SQLUtils.format(executeSql, JdbcUtils.MYSQL, params); + } + }catch (Exception ex){ + log.warn("[-SQL解析异常-][{}]",ex.getMessage()); + } + log.info("[----SQL----][select][执行结果:{}][ SQL: {} ]",result, executeSql); + } + return rs; + } + + + + + +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/config/mybatis/MybatisPlusConfig.java b/nladmin-system/nlsso-server/src/main/java/org/nl/config/mybatis/MybatisPlusConfig.java index c854f10..3c90cfa 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/config/mybatis/MybatisPlusConfig.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/config/mybatis/MybatisPlusConfig.java @@ -1,13 +1,19 @@ package org.nl.config.mybatis; +import com.alibaba.druid.pool.DruidDataSource; import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.transaction.annotation.EnableTransactionManagement; +import javax.annotation.PostConstruct; +import javax.sql.DataSource; + /** *

* MybatisPlus配置 @@ -16,10 +22,13 @@ import org.springframework.transaction.annotation.EnableTransactionManagement; * @author generator * @since 2023-11-16 */ -@EnableTransactionManagement @Configuration +@Slf4j public class MybatisPlusConfig { + + @Autowired + private DataSource dataSource; /** * 新的分页插件,一缓和二缓遵循mybatis的规则,需要设置 MybatisConfiguration#useDeprecatedExecutor = false 避免缓存出现问题(该属性会在旧插件移除后一同移除) 添加自增插件 @@ -35,5 +44,10 @@ public class MybatisPlusConfig { return interceptor; } - + @PostConstruct + public void datainnit() { + String url = ((DruidDataSource) dataSource).getUrl(); + System.out.println("项目数据库地址:" + url); + log.debug("项目数据库地址:{}", url); + } } diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/config/saconfig/CorsFilter.java b/nladmin-system/nlsso-server/src/main/java/org/nl/config/saconfig/CorsFilter.java deleted file mode 100644 index 9a67267..0000000 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/config/saconfig/CorsFilter.java +++ /dev/null @@ -1,56 +0,0 @@ -//package org.nl.config.saconfig; -// -//import org.springframework.core.annotation.Order; -//import org.springframework.stereotype.Component; -//import org.springframework.web.cors.CorsConfiguration; -// -//import javax.servlet.*; -//import javax.servlet.http.HttpServletRequest; -//import javax.servlet.http.HttpServletResponse; -//import java.io.IOException; -// -///** -// * 跨域过滤器 -// * @author kong -// */ -//@Component -//@Order(-200) -//public class CorsFilter implements Filter { -// -// static final String OPTIONS = "OPTIONS"; -// -// @Override -// public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) -// throws IOException, ServletException { -// HttpServletRequest request = (HttpServletRequest) req; -// HttpServletResponse response = (HttpServletResponse) res; -// // 允许指定域访问跨域资源 -// response.setHeader("Access-Control-Allow-Origin", "*"); -// // 允许所有请求方式 -// response.setHeader("Access-Control-Allow-Methods", "*"); -// // 有效时间 -// response.setHeader("Access-Control-Max-Age", "3600"); -// // 允许的header参数 -// response.setHeader("Access-Control-Allow-Headers", "*"); -// response.setHeader("Access-Control-Allow-Credentials", "true"); -// -// // 如果是预检请求,直接返回 -// if (OPTIONS.equals(request.getMethod())) { -// System.out.println("=======================浏览器发来了OPTIONS预检请求=========="); -// response.getWriter().print(""); -// return; -// } -// -// // System.out.println("*********************************过滤器被使用**************************"); -// chain.doFilter(req, res); -// } -// -// @Override -// public void init(FilterConfig filterConfig) { -// } -// -// @Override -// public void destroy() { -// } -// -//} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/config/saconfig/LoginUserHandler.java b/nladmin-system/nlsso-server/src/main/java/org/nl/config/saconfig/LoginUserHandler.java deleted file mode 100644 index ac8193d..0000000 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/config/saconfig/LoginUserHandler.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.nl.config.saconfig; - -import cn.dev33.satoken.stp.StpUtil; -import cn.dev33.satoken.util.SaResult; -import org.springframework.stereotype.Component; - -import java.util.function.BiFunction; - -/** - * s - * @author ZZQ - * @Date 2022/11/24 3:47 下午 - */ -@Component -public class LoginUserHandler implements BiFunction { - @Override - public Object apply(String user, String password) { - //用户登入账号密码查询: - StpUtil.login(Long.valueOf(password)); - - return SaResult.ok("登录成功!").setData(StpUtil.getTokenValue()); - - } - -} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/config/saconfig/SaInitConfig.java b/nladmin-system/nlsso-server/src/main/java/org/nl/config/saconfig/SaInitConfig.java deleted file mode 100644 index fedff5f..0000000 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/config/saconfig/SaInitConfig.java +++ /dev/null @@ -1,35 +0,0 @@ -package org.nl.config.saconfig; - -import cn.dev33.satoken.config.SaSsoConfig; -import cn.hutool.http.HttpRequest; -import cn.hutool.http.HttpResponse; -import org.apache.http.client.HttpClient; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Configuration; -import org.springframework.web.servlet.ModelAndView; - -/** - * s - * @author ZZQ - * @Date 2022/11/28 10:58 上午 - */ -@Configuration -public class SaInitConfig { - - @Autowired - LoginUserHandler loginUserHandler; - - @Autowired - public void configSso(SaSsoConfig sso) { - System.out.println("启动初始化-----SaSsoConfig"); - // 配置:未登录时返回的View - sso.setNotLoginView(() -> new ModelAndView("sa-login")); - // 配置:登录处理函数 - sso.setDoLoginHandle(loginUserHandler); - - sso.setSendHttp(s -> { - HttpResponse execute = HttpRequest.get(s).execute(); - return execute.body(); - }); - } -} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/common/security/satoken/RedisListenerConfig.java b/nladmin-system/nlsso-server/src/main/java/org/nl/config/satoken/RedisListenerConfig.java similarity index 89% rename from nladmin-system/nlsso-server/src/main/java/org/nl/common/security/satoken/RedisListenerConfig.java rename to nladmin-system/nlsso-server/src/main/java/org/nl/config/satoken/RedisListenerConfig.java index b5b0448..0b9d10a 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/common/security/satoken/RedisListenerConfig.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/config/satoken/RedisListenerConfig.java @@ -1,4 +1,4 @@ -package org.nl.common.security.satoken; +package org.nl.config.satoken; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -7,7 +7,7 @@ import org.springframework.data.redis.listener.RedisMessageListenerContainer; /** * @author: lyd - * @description: redis监听配置 + * @description: * @Date: 2022/10/8 */ @Configuration diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/common/security/satoken/SaTokenConfigure.java b/nladmin-system/nlsso-server/src/main/java/org/nl/config/satoken/SaTokenConfigure.java similarity index 59% rename from nladmin-system/nlsso-server/src/main/java/org/nl/common/security/satoken/SaTokenConfigure.java rename to nladmin-system/nlsso-server/src/main/java/org/nl/config/satoken/SaTokenConfigure.java index 423c90b..ba6aa8b 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/common/security/satoken/SaTokenConfigure.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/config/satoken/SaTokenConfigure.java @@ -1,12 +1,12 @@ -package org.nl.common.security.satoken; +package org.nl.config.satoken; import cn.dev33.satoken.interceptor.SaInterceptor; import cn.dev33.satoken.jwt.StpLogicJwtForSimple; import cn.dev33.satoken.stp.StpLogic; import cn.dev33.satoken.stp.StpUtil; -import lombok.RequiredArgsConstructor; +import lombok.Data; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; @@ -18,37 +18,27 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; * @Date: 2022-09-20 */ @Slf4j +@ConfigurationProperties(prefix = "security") @Configuration +@Data public class SaTokenConfigure implements WebMvcConfigurer { - /** - * 白名单 - */ - @Autowired - private SecurityProperties securityProperties; + // 白名单 - /** - * Sa-Token 整合 jwt (Simple 简单模式) - * @return StpLogic/ - */ + private String[] excludes; + // Sa-Token 整合 jwt (Simple 简单模式) @Bean public StpLogic getStpLogicJwt() { return new StpLogicJwtForSimple(); } - /** - * 注册 Sa-Token 拦截器,打开注解式鉴权功能 - * @param registry - */ + // 注册 Sa-Token 拦截器,打开注解式鉴权功能 @Override public void addInterceptors(InterceptorRegistry registry) { - /* - * 注册 Sa-Token 拦截器,打开注解式鉴权功能 - * .excludePathPatterns(securityProperties.getExcludes()): 白名单 - */ + // 注册 Sa-Token 拦截器,打开注解式鉴权功能 registry.addInterceptor(new SaInterceptor(handle -> StpUtil.checkLogin())) .addPathPatterns("/**") - .excludePathPatterns(securityProperties.getExcludes()); + .excludePathPatterns(excludes); // 白名单 } } diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/common/security/satoken/StpInterfaceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/config/satoken/StpInterfaceImpl.java similarity index 95% rename from nladmin-system/nlsso-server/src/main/java/org/nl/common/security/satoken/StpInterfaceImpl.java rename to nladmin-system/nlsso-server/src/main/java/org/nl/config/satoken/StpInterfaceImpl.java index 2bfd6aa..b5e99e6 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/common/security/satoken/StpInterfaceImpl.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/config/satoken/StpInterfaceImpl.java @@ -1,4 +1,4 @@ -package org.nl.common.security.satoken; +package org.nl.config.satoken; import cn.dev33.satoken.stp.StpInterface; import org.nl.common.utils.SecurityUtils; diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/common/security/satoken/hint.md b/nladmin-system/nlsso-server/src/main/java/org/nl/config/satoken/hint.md similarity index 97% rename from nladmin-system/nlsso-server/src/main/java/org/nl/common/security/satoken/hint.md rename to nladmin-system/nlsso-server/src/main/java/org/nl/config/satoken/hint.md index 627b958..ffefb75 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/common/security/satoken/hint.md +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/config/satoken/hint.md @@ -7,7 +7,7 @@ @Data public class CurrentUser implements Serializable { @JsonSerialize(using = ToStringSerializer.class) - private String id; + private Long id; private String username; @@ -22,7 +22,7 @@ public class CurrentUser implements Serializable { @Setter public class UserDto extends BaseDTO implements Serializable { @JsonSerialize(using = ToStringSerializer.class) - private String id; + private Long id; private Set roles; diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/lucence/LuceneController.java b/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/lucence/LuceneController.java deleted file mode 100644 index dd38082..0000000 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/lucence/LuceneController.java +++ /dev/null @@ -1,42 +0,0 @@ -package org.nl.system.controller.lucence; - -import com.alibaba.fastjson.JSONObject; - - -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.nl.common.logging.annotation.Log; -import org.nl.system.service.lucene.LuceneService; -import org.springframework.data.domain.Pageable; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.*; - -import java.util.Map; - -/** - *

- * 日志检索 - *

- * - * @author generator - * @since 2023-11-16 - */ -@RestController -@RequiredArgsConstructor -@RequestMapping("/api/lucene") -@Slf4j -public class LuceneController { - - private final LuceneService luceneService; - - @PostMapping("/getAll") - public ResponseEntity get(@RequestBody JSONObject whereJson) { - return new ResponseEntity<>(luceneService.getAll(whereJson), HttpStatus.OK); - } - - @PostMapping("/getTagName") - public ResponseEntity getTagName() { - return new ResponseEntity<>(luceneService.getTagName(), HttpStatus.OK); - } -} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/lucence/LuceneLogController.java b/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/lucence/LuceneLogController.java new file mode 100644 index 0000000..4a5972a --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/lucence/LuceneLogController.java @@ -0,0 +1,69 @@ +package org.nl.system.controller.lucence; + +import cn.dev33.satoken.annotation.SaIgnore; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.logging.annotation.Log; +import org.nl.system.service.logserver.LogQuery; +import org.nl.system.service.logserver.LuceneLogService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +/** + * @author ldjun + * @version 1.0 + * @date 2023年01月29日 18:55 + * @desc desc + */ + +@RestController +@RequestMapping("/api/esLog") +@Slf4j +public class LuceneLogController { + + @Autowired + private LuceneLogService luceneLogService; + + + @GetMapping("/labels/{type}") + //("获取标签") + public ResponseEntity labelsValues(@PathVariable String type) { + return new ResponseEntity<>(luceneLogService.getLabelsValues(type), HttpStatus.OK); + } + + @PostMapping("/query") + //("日志查询") + public ResponseEntity queryAll(@RequestBody LogQuery query) { + return new ResponseEntity<>(luceneLogService.query(query), HttpStatus.OK); + } + @DeleteMapping("/clearLogs") + //("清空日志") + public ResponseEntity clearLogs(@RequestBody LogQuery query) { + luceneLogService.clearLogs(query); + return new ResponseEntity<>(HttpStatus.OK); + } + + @GetMapping("/thread") + @SaIgnore + @Log("线程追踪测试") + //("清空日志") + public ResponseEntity thread(@RequestBody LogQuery query) { + log.info("线程链路测试"+Thread.currentThread().getName()); + log.error("线程链路测试"+Thread.currentThread().getName()); + luceneLogService.syncdemo(); + Thread thread = new Thread(()->{ + try { + Thread.sleep(5000); + log.info("线程链路测试"+Thread.currentThread().getName()); + log.error("线程链路测试"+Thread.currentThread().getName()); + log.info("线程链路测试"+Thread.currentThread().getName()); + }catch (Exception ex){ + ex.printStackTrace(); + } + }); + thread.start(); + return new ResponseEntity<>(HttpStatus.OK); + } + +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/secutiry/AuthorizationController.java b/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/secutiry/AuthorizationController.java index 896878f..2997f48 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/secutiry/AuthorizationController.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/secutiry/AuthorizationController.java @@ -13,9 +13,8 @@ import lombok.extern.slf4j.Slf4j; import org.nl.common.utils.RedisUtils; import org.nl.common.utils.SecurityUtils; import org.nl.common.utils.dto.CurrentUser; -import org.nl.common.security.config.bean.LoginCodeEnum; -import org.nl.common.security.config.bean.LoginProperties; -import org.nl.system.service.secutiry.impl.OnlineUserService; +import org.nl.system.service.secutiry.entity.LoginProperties; +import org.nl.system.service.secutiry.enums.LoginCodeEnum; import org.nl.system.service.user.ISysUserService; import org.nl.system.service.user.dao.SysUser; import org.springframework.beans.factory.annotation.Autowired; @@ -40,19 +39,17 @@ public class AuthorizationController { @Autowired private RedisUtils redisUtils; @Autowired - private OnlineUserService onlineUserService; - @Autowired private ISysUserService userService; @Autowired private LoginProperties loginProperties; @PostMapping(value = "/login") - public ResponseEntity login(@RequestBody Map authMap, HttpServletRequest request) throws Exception { + public ResponseEntity login(@RequestBody JSONObject authMap, HttpServletRequest request) throws Exception { if (ObjectUtil.isEmpty(authMap)){ return ResponseEntity.noContent().build(); } - return ResponseEntity.ok(onlineUserService.login(authMap, request)); + return new ResponseEntity(userService.login(authMap),HttpStatus.OK); } @@ -102,9 +99,6 @@ public class AuthorizationController { @DeleteMapping(value = "/logout") public ResponseEntity logout(HttpServletRequest request) { - if (ObjectUtil.isNotEmpty(StpUtil.getTokenValue())) { - onlineUserService.logout(StpUtil.getTokenValue()); - } StpUtil.logout(); return new ResponseEntity<>(HttpStatus.OK); } diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/user/OnlineController.java b/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/user/OnlineController.java deleted file mode 100644 index abb37e2..0000000 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/user/OnlineController.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright 2019-2020 Zheng Jie - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.nl.system.controller.user; - -import com.alibaba.fastjson.JSONArray; - - -import org.nl.common.utils.EncryptUtils; -import org.nl.system.service.secutiry.impl.OnlineUserService; -import org.nl.system.service.user.dto.OnlineUserDto; -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.web.bind.annotation.*; - -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; -import java.util.List; -import java.util.Set; - -/** - * @author Zheng Jie - */ -@RestController -@RequestMapping("/auth/online") -public class OnlineController { - - @Autowired - private OnlineUserService onlineUserService; - - - @GetMapping - public ResponseEntity query(String filter, Pageable pageable){ - return new ResponseEntity<>(onlineUserService.getAll(filter, pageable),HttpStatus.OK); - } - - - @GetMapping(value = "/download") - public void download(HttpServletResponse response, String filter) throws IOException { - onlineUserService.download(onlineUserService.getAll(filter), response); - } - - - @DeleteMapping - public ResponseEntity delete(@RequestBody List keys) throws Exception { - for (OnlineUserDto key : keys) { - // 解密Key - key.setKey(EncryptUtils.desDecrypt(key.getKey())); - onlineUserService.kickOut(key); - } - return new ResponseEntity<>(HttpStatus.OK); - } -} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/dept/dao/SysUserDept.java b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/dept/dao/SysUserDept.java index fb29ffa..9c3762c 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/dept/dao/SysUserDept.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/dept/dao/SysUserDept.java @@ -1,5 +1,6 @@ package org.nl.system.service.dept.dao; +import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import lombok.EqualsAndHashCode; @@ -24,6 +25,7 @@ public class SysUserDept implements Serializable { /** * 用户标识 */ + @TableId private Long user_id; /** diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/logserver/LogQuery.java b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/logserver/LogQuery.java new file mode 100644 index 0000000..67988c4 --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/logserver/LogQuery.java @@ -0,0 +1,47 @@ +package org.nl.system.service.logserver; + +import lombok.Data; + +import java.util.Date; + +/* + * @author ZZQ + * @Date 2023/2/8 5:18 下午 + */ +@Data +public class LogQuery { + /** + * 创建时间范围查询 + */ + private Date startTime; + private Date endTime; + /** + * 追踪id + */ + private String traceId; + private String requestMethod; + /** + * 日志内容模糊匹配 + */ + private String message; + /** + * 日志级别 + */ + private String logLevel; + /** + * 系统标签 + */ + private String system; + /** + * 是否只查询Http相关请求 + */ + private Boolean isRequest = Boolean.TRUE; + /** + * 是否过滤wql日志 + */ + private Boolean filterSql = Boolean.TRUE; + + private Integer size = 20; + + private Integer page = 1; +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/logserver/LogRepositoryDTO.java b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/logserver/LogRepositoryDTO.java new file mode 100644 index 0000000..0ca1d6d --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/logserver/LogRepositoryDTO.java @@ -0,0 +1,27 @@ +package org.nl.system.service.logserver; + +import lombok.Data; +import org.springframework.data.annotation.Id; + +/* + * @author ZZQ + * @Date 2023/2/8 4:06 下午 + */ +//@Document(indexName = "#{@ESConfig.index}", type = "mes_log") +@Data +public class LogRepositoryDTO { + + private String message; + private String host; + private String logLevel; + private String logger; + private String requestTime; + private String requestIp; + @Id + private String id; + private String traceId; + private String requestMethod; + private String thread; + private String system; + +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/logserver/LuceneLogService.java b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/logserver/LuceneLogService.java new file mode 100644 index 0000000..0197ac8 --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/logserver/LuceneLogService.java @@ -0,0 +1,32 @@ +package org.nl.system.service.logserver; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; + +/** + * @author ldjun + * @version 1.0 + * @date 2023年02月07日 14:34 + * @desc desc + */ +public interface LuceneLogService { + + /** + * 清空日志 + */ + void clearLogs(LogQuery query); + /** + * 获取labels和values树 + * @return + */ + JSONArray getLabelsValues(String type); + + /** + * 日志查询 + * @param logQuery + * @return + */ + JSONObject query(LogQuery logQuery); + + void syncdemo(); +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/logserver/LuceneLogServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/logserver/LuceneLogServiceImpl.java new file mode 100644 index 0000000..f6e9abc --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/logserver/LuceneLogServiceImpl.java @@ -0,0 +1,172 @@ +package org.nl.system.service.logserver; + +import cn.hutool.core.date.DateField; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.db.PageResult; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.apache.lucene.document.Document; +import org.apache.lucene.index.DirectoryReader; +import org.apache.lucene.index.IndexWriter; +import org.apache.lucene.index.Term; +import org.apache.lucene.queryparser.classic.QueryParser; +import org.apache.lucene.search.*; +import org.apache.lucene.store.FSDirectory; +import org.apache.lucene.util.BytesRef; +import org.nl.common.exception.BadRequestException; +import org.nl.config.lucene.LuceneAppender; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; +import org.wltea.analyzer.lucene.IKAnalyzer; + +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Service +@Slf4j +public class LuceneLogServiceImpl implements LuceneLogService { + + static String[] INFO_LEVEL = new String[]{"DEBUG","INFO","WARN","ERROR"}; + + @Value("${lucene.index.path}") + private String indexUrl; + + @Override + public void clearLogs(LogQuery query) { + try { + IndexWriter indexWriter = LuceneAppender.indexWriter; + if (indexWriter != null){ + BooleanQuery.Builder booleanQueryBuilder = new BooleanQuery.Builder(); + DateTime offset = DateUtil.offset(new Date(), DateField.HOUR_OF_DAY, -10); + TermRangeQuery termRangeQuery = new TermRangeQuery( + "requestTime",null, + new BytesRef(DateUtil.format(offset, "yyyy-MM-dd HH:mm:ss.SSS")), true, true); + booleanQueryBuilder.add(termRangeQuery,BooleanClause.Occur.MUST); + indexWriter.deleteDocuments(termRangeQuery); + indexWriter.commit(); + } + }catch (Exception ex){ + throw new BadRequestException("删除失败:"+ex.getMessage()); + } + } + + @Override + public JSONArray getLabelsValues(String type) { + JSONArray result = new JSONArray(); + for (String v : INFO_LEVEL) { + JSONObject item = new JSONObject(); + item.put("label", v); + item.put("value", v); + result.add(item); + } + return result; + } + + + @Override + public JSONObject query(LogQuery logQuery) { + JSONObject res = new JSONObject(); + PageResult page = new PageResult(); + page.setPage(logQuery.getPage()); + page.setPageSize(logQuery.getSize()); + try { + FSDirectory directory = FSDirectory.open(Paths.get(indexUrl)); + DirectoryReader open = DirectoryReader.open(directory); + IndexSearcher searcher = new IndexSearcher(open); + // 创建排序对象,需要排序字段SortField,参数:字段的名称、字段的类型、是否反转如果是false,升序。true降序 + BooleanQuery.Builder booleanQueryBuilder = new BooleanQuery.Builder(); + //时间范围查询 + Date startDate = logQuery.getStartTime(); + Date endDate = logQuery.getEndTime(); + + if (startDate == null){ + Calendar calendar=Calendar.getInstance(); + calendar.set(1970, 0, 1); + startDate = calendar.getTime(); } + if (endDate == null){ endDate = new DateTime(); } + TermRangeQuery termRangeQuery = new TermRangeQuery( + "requestTime", + new BytesRef(DateUtil.format(startDate, "yyyy-MM-dd HH:mm:ss.SSS")), + new BytesRef(DateUtil.format(endDate, "yyyy-MM-dd HH:mm:ss.SSS")), true, true); + booleanQueryBuilder.add(termRangeQuery,BooleanClause.Occur.MUST); + + // 字段之间的与或非关系,MUST表示and,MUST_NOT表示not,SHOULD表示or,有几个fields就必须有几个clauses + if (ObjectUtil.isNotEmpty(logQuery.getTraceId())){ + TermQuery termQuery = new TermQuery(new Term("traceId", logQuery.getTraceId())); + booleanQueryBuilder.add(termQuery, BooleanClause.Occur.MUST); + } + if (ObjectUtil.isNotEmpty(logQuery.getLogLevel())){ + TermQuery termQuery = new TermQuery(new Term("logLevel", logQuery.getLogLevel())); + booleanQueryBuilder.add(termQuery, BooleanClause.Occur.MUST); + } + if (ObjectUtil.isNotEmpty(logQuery.getSystem())) { + TermQuery termQuery = new TermQuery(new Term("system", logQuery.getSystem())); + booleanQueryBuilder.add(termQuery, BooleanClause.Occur.MUST); + } + if (ObjectUtil.isNotEmpty(logQuery.getRequestMethod())) { + TermQuery termQuery = new TermQuery(new Term("requestMethod", logQuery.getRequestMethod())); + booleanQueryBuilder.add(termQuery, BooleanClause.Occur.MUST); + } + if (Boolean.TRUE.equals(logQuery.getIsRequest())) { + Term traceid = new Term("traceId"); + TermQuery termQuery = new TermQuery(traceid); + booleanQueryBuilder.add(termQuery, BooleanClause.Occur.MUST_NOT); + } + if (ObjectUtil.isNotEmpty(logQuery.getMessage())){ + //查询解析器 + QueryParser queryParser = new QueryParser("message", new IKAnalyzer(true)); + Query query = queryParser.parse(logQuery.getMessage()); + booleanQueryBuilder.add(query, BooleanClause.Occur.MUST); + } + + TopFieldCollector collector = TopFieldCollector.create(new Sort(new SortField("time", SortField.Type.LONG,true)), 20000, 0); + searcher.search(booleanQueryBuilder.build(), collector); + TopDocs topDocs = collector.topDocs((logQuery.getPage()-1)*logQuery.getSize(), logQuery.getSize()); + int totalSize = collector.getTotalHits(); + ScoreDoc[] scoreDocs = topDocs.scoreDocs; + + List list = new ArrayList<>(); + for (ScoreDoc scoreDoc : scoreDocs) { + Document doc = open.document(scoreDoc.doc); + LogRepositoryDTO dto = new LogRepositoryDTO(); + dto.setSystem(doc.get("system")); + dto.setTraceId(doc.get("traceId")); + dto.setLogger(doc.get("logger")); + dto.setLogLevel(doc.get("logLevel")); + dto.setMessage(doc.get("message")); + dto.setRequestIp(doc.get("requestIp")); + dto.setRequestMethod(doc.get("requestMethod")); + dto.setRequestTime(doc.get("requestTime")); + dto.setThread(doc.get("thread")); + list.add(dto); + } + open.close(); + directory.close(); + page.addAll(list); + page.setTotal(scoreDocs.length); + res.put("total", totalSize); + }catch (Exception ex){ + ex.printStackTrace(); + } + res.put("page",page); + return res; + + } + + + @Override + @Async + public void syncdemo() { + log.info("Async线程链路测试"+Thread.currentThread().getName()); + log.error("Async线程链路测试"+Thread.currentThread().getName()); + log.info("Async线程链路测试"+Thread.currentThread().getName()); + log.info("线程链路测试"+Thread.currentThread().getName()); + } +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/lucene/LuceneExecuteLogService.java b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/lucene/LuceneExecuteLogService.java deleted file mode 100644 index e5c6837..0000000 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/lucene/LuceneExecuteLogService.java +++ /dev/null @@ -1,48 +0,0 @@ -package org.nl.system.service.lucene; - -import org.nl.system.service.lucene.dto.LuceneLogDto; - -import java.io.IOException; - -/** - *

- * 日志检索服务 - *

- * - * @author generator - * @since 2023-11-16 - */ -public interface LuceneExecuteLogService { - /** - * 设备光电变化实时光电信号 - * - * @param device_code 设备编号 - * @param key plc信号 - * @param value plc信号值 - */ - void deviceItemValue(String device_code, String key, String value); - - /** - * 设备执行日志,会保留历史记录 - * - * @param luceneLogDto 日志结果对象 - */ - void deviceExecuteLog(LuceneLogDto luceneLogDto); - - /** - * 接口日志,会保留历史记录 - * @param luceneLogDto 日志结果对象 - * @throws IOException - */ - void interfaceExecuteLog(LuceneLogDto luceneLogDto) throws IOException; - - /** - * 设备执行日志,会保留历史记录 - * - * @param name 日志名称 - * @param message 日志信息 - */ - void extLog(String name, String message); - - -} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/lucene/LuceneService.java b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/lucene/LuceneService.java deleted file mode 100644 index c2e4b0f..0000000 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/lucene/LuceneService.java +++ /dev/null @@ -1,31 +0,0 @@ -package org.nl.system.service.lucene; - -import com.alibaba.fastjson.JSONObject; - -import java.util.List; -import java.util.Map; - -/** - *

- * 、 - *

- * - * @author generator - * @since 2023-11-16 - */ -public interface LuceneService { - - /** - * 获取数据分页 - * - * @param whereJson 条件 - * @return Map - */ - Map getAll(JSONObject whereJson); - - /** - * 获取枚举的标签名称 - * @return - */ - List getTagName(); -} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/lucene/dto/LuceneLogDto.java b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/lucene/dto/LuceneLogDto.java deleted file mode 100644 index c2534f1..0000000 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/lucene/dto/LuceneLogDto.java +++ /dev/null @@ -1,116 +0,0 @@ -package org.nl.system.service.lucene.dto; - -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - -/** - *

- * 日志DTO - *

- * - * @author generator - * @since 2023-11-16 - */ -@Data -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class LuceneLogDto { - - /** - * 日志标识 - */ - private String log_uuid; - /** - * 日志类型 - */ - private String logType; - /** - * 设备编号 - */ - private String device_code; - /** - * 内容详情 - */ - private String content; - /** - * 任务编码 - */ - private String task_code; - /** - * 指令编码 - */ - private String instruct_code; - /** - * 任务标识 - */ - private String task_id; - /** - * 载具号 - */ - private String vehicle_code; - /** - * 备注 - */ - private String remark; - /** - * 日志类型 - */ - private String log_type; - /** - * 方法 - */ - private String method; - /** - * 请求参数 - */ - private String requestparam; - /** - * 响应参数 - */ - private String responseparam; - /** - * 请求地址 - */ - private String requesturl; - /** - * 状态码 - */ - private String status_code; - /** - * 是否删除 1:是;0:否 - */ - private String is_delete; - /** - * 创建者 - */ - private String create_by; - /** - * 创建时间 YYYY-MM-DD hh:mm:ss - */ - private String create_time; - /** - * 修改者 - */ - private String update_by; - /** - * 修改时间 - */ - private String update_time; - - public LuceneLogDto (final String opc_server_code,final String opc_plc_code, - final String device_code,final String to_home,final int last_home, - final int home) { - super (); - this.device_code = device_code; - this.content = "信号" - + opc_server_code + "." - + opc_plc_code + "." - + device_code + "." - + to_home + "变更从" - + last_home + "->" - + home; - } -} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/lucene/impl/LuceneExecuteLogServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/lucene/impl/LuceneExecuteLogServiceImpl.java deleted file mode 100644 index 2c04946..0000000 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/lucene/impl/LuceneExecuteLogServiceImpl.java +++ /dev/null @@ -1,111 +0,0 @@ -package org.nl.system.service.lucene.impl; - -import cn.hutool.core.date.DateTime; -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.ObjectUtil; -import lombok.RequiredArgsConstructor; -import lombok.SneakyThrows; -import lombok.extern.slf4j.Slf4j; -import org.apache.lucene.document.Document; -import org.apache.lucene.document.Field; -import org.apache.lucene.document.StringField; -import org.apache.lucene.index.IndexWriter; -import org.nl.common.enums.LogTypeEnum; -import org.nl.config.lucene.DynamicLogger; -import org.nl.config.lucene.LuceneIndexWriter; -import org.nl.system.service.lucene.LuceneExecuteLogService; -import org.nl.system.service.lucene.dto.LuceneLogDto; -import org.slf4j.Logger; -import org.slf4j.MDC; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Service; - -import java.io.IOException; - -/** - * @author jlm - * @description 服务实现 - * @date 2023-04-11 - */ -@Service -@RequiredArgsConstructor -@Slf4j -public class LuceneExecuteLogServiceImpl implements LuceneExecuteLogService { - - /** - * 日志目录 - */ - @Value("${logging.file.path}") - private String logPath; - - @Override - public void deviceItemValue(String device_code, String key, String value) { - String now = DateUtil.now(); - } - - @SneakyThrows - @Override - public void deviceExecuteLog(LuceneLogDto luceneLogDto) { - luceneLogDto.setLogType(LogTypeEnum.DEVICE_LOG.getDesc()); - addIndex(luceneLogDto); - } - - @Override - public void interfaceExecuteLog(LuceneLogDto luceneLogDto) throws IOException { - luceneLogDto.setLogType(LogTypeEnum.INTERFACE_LOG.getDesc()); - addIndex(luceneLogDto); - } - - private void addIndex(LuceneLogDto luceneLogDto) throws IOException { - IndexWriter indexWriter = LuceneIndexWriter.getIndexWriter(); - //创建一个Document对象 - Document document = new Document(); - try { - //记录索引开始时间 - long startTime = System.currentTimeMillis(); - //向document对象中添加域。 - if (ObjectUtil.isNotEmpty(luceneLogDto.getDevice_code())) { - document.add(new StringField("device_code", luceneLogDto.getDevice_code(), Field.Store.YES)); - } - if (ObjectUtil.isNotEmpty(luceneLogDto.getContent())) { - document.add(new StringField("fieldContent", luceneLogDto.getContent(), Field.Store.YES)); - } - if (ObjectUtil.isNotEmpty(luceneLogDto.getMethod())) { - document.add(new StringField("method", luceneLogDto.getMethod(), Field.Store.YES)); - } - if (ObjectUtil.isNotEmpty(luceneLogDto.getStatus_code())) { - document.add(new StringField("status_code", luceneLogDto.getStatus_code(), Field.Store.YES)); - } - if (ObjectUtil.isNotEmpty(luceneLogDto.getRequestparam())) { - document.add(new StringField("requestparam", luceneLogDto.getRequestparam(), Field.Store.YES)); - } - if (ObjectUtil.isNotEmpty(luceneLogDto.getResponseparam())) { - document.add(new StringField("responseparam", luceneLogDto.getResponseparam(), Field.Store.YES)); - } - document.add(new StringField("logType", luceneLogDto.getLogType(), Field.Store.YES)); - document.add(new StringField("logTime", DateUtil.format(new DateTime(), "yyyy-MM-dd HH:mm:ss.SSS"), Field.Store.YES)); - indexWriter.addDocument(document); - //记录索引结束时间 - long endTime = System.currentTimeMillis(); - indexWriter.commit(); - //实现日志文件按业务独立生成日志文件到指定路径 - DynamicLogger loggerBuilder =new DynamicLogger(logPath+"\\"+luceneLogDto.getLogType()+"\\"); - Logger logger = loggerBuilder.getLogger(luceneLogDto.getDevice_code()); - logger.info("{}",luceneLogDto.toString()); - } catch (Exception e) { - log.error(e.getMessage(), e); - } - } - - @Override - public void extLog(String name, String message) { - try { - MDC.put(name, name); - log.info("{}", message); - } catch (Exception e) { - e.printStackTrace(); - } finally { - MDC.remove(name); - } - } -} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/lucene/impl/LuceneServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/lucene/impl/LuceneServiceImpl.java deleted file mode 100644 index d10ae06..0000000 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/lucene/impl/LuceneServiceImpl.java +++ /dev/null @@ -1,60 +0,0 @@ -package org.nl.system.service.lucene.impl; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.nl.config.language.LangProcess; -import org.nl.config.lucene.Searcher; -import org.nl.config.lucene.TagNameEnum; -import org.nl.system.service.lucene.LuceneService; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Service; - -import java.util.Arrays; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -/** - *

- * 、 - *

- * - * @author generator - * @since 2023-11-16 - */ -@Service -@RequiredArgsConstructor -@Slf4j -public class LuceneServiceImpl implements LuceneService { - - /** - * 日志索引目录 - */ - @Value("${lucene.index.path}") - private String luceneUrl; - - @Override - public Map getAll(JSONObject whereJson) { - JSONObject jo = new JSONObject(); - try { - JSONObject jsonObject = (JSONObject) Searcher.search(luceneUrl, whereJson); - JSONArray array = jsonObject.getJSONArray("content"); - int totalElements = Integer.parseInt(jsonObject.get("totalElements").toString()); - jo.put("content", array); - jo.put("totalElements", totalElements); - } catch (Exception e) { - log.error("索引查询为空", e); - throw new NullPointerException(LangProcess.msg("error_NullPoint")); - } - - return jo; - } - - @Override - public List getTagName() { - return Arrays.stream(TagNameEnum.values()).map(TagNameEnum::getTag).collect(Collectors.toList()); - } - -} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/menu/impl/SysMenuServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/menu/impl/SysMenuServiceImpl.java index ea04c4f..2f2b76c 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/menu/impl/SysMenuServiceImpl.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/menu/impl/SysMenuServiceImpl.java @@ -23,7 +23,6 @@ import org.nl.config.IdUtil; import org.nl.config.language.LangProcess; import org.nl.system.service.dict.dao.Dict; import org.nl.system.service.dict.dao.mapper.SysDictMapper; -import org.nl.system.service.lucene.LuceneExecuteLogService; import org.nl.system.service.menu.dto.MenuDto; import org.nl.system.service.menu.ISysMenuService; import org.nl.system.service.menu.dao.SysMenu; @@ -56,8 +55,6 @@ public class SysMenuServiceImpl extends ServiceImpl impl @Autowired private SysDictMapper sysDictMapper; - @Autowired - private LuceneExecuteLogService luceneExecuteLogService; @Override public List queryAll(Map param) { diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/permission/dao/SysDataPermission.java b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/permission/dao/SysDataPermission.java index a289345..1c2f4ea 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/permission/dao/SysDataPermission.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/permission/dao/SysDataPermission.java @@ -8,7 +8,6 @@ import java.io.Serializable; import lombok.Data; import lombok.EqualsAndHashCode; -import javax.validation.constraints.NotNull; /** *

@@ -34,13 +33,11 @@ public class SysDataPermission implements Serializable { /** * 编码 */ - @NotNull private String code; /** * 名称 */ - @NotNull private String name; /** diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/dao/SysQuartzJob.java b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/dao/SysQuartzJob.java index cd735b0..98c69df 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/dao/SysQuartzJob.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/dao/SysQuartzJob.java @@ -7,7 +7,6 @@ import java.io.Serializable; import lombok.Data; import lombok.EqualsAndHashCode; -import javax.validation.constraints.NotBlank; /** *

@@ -35,13 +34,11 @@ public class SysQuartzJob implements Serializable { /** * bean名 */ - @NotBlank private String bean_name; /** * corn表达式 */ - @NotBlank private String cron_expression; /** @@ -52,13 +49,11 @@ public class SysQuartzJob implements Serializable { /** * 任务名称 */ - @NotBlank private String job_name; /** * 方法名称 */ - @NotBlank private String method_name; /** @@ -69,7 +64,6 @@ public class SysQuartzJob implements Serializable { /** * 备注 */ - @NotBlank private String description; /** diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/utils/ExecutionJob.java b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/utils/ExecutionJob.java index 19ea970..c46de44 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/utils/ExecutionJob.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/utils/ExecutionJob.java @@ -1,13 +1,10 @@ package org.nl.system.service.quartz.utils; - import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.StrUtil; -import com.yomahub.tlog.task.quartz.TLogQuartzJobBean; import lombok.extern.slf4j.Slf4j; + import org.nl.common.utils.RedisUtils; -import org.nl.common.utils.ThrowableUtil; import org.nl.config.SpringContextHolder; -import org.nl.config.thread.ThreadPoolExecutorUtil; import org.nl.system.service.quartz.ISysQuartzJobService; import org.nl.system.service.quartz.dao.SysQuartzJob; import org.nl.system.service.quartz.dao.SysQuartzLog; @@ -16,11 +13,11 @@ import org.nl.system.service.quartz.impl.SysQuartzJobServiceImpl; import org.quartz.DisallowConcurrentExecution; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.quartz.QuartzJobBean; +import javax.annotation.Resource; import java.util.concurrent.Future; import java.util.concurrent.ThreadPoolExecutor; @@ -33,18 +30,17 @@ import java.util.concurrent.ThreadPoolExecutor; @SuppressWarnings({"unchecked", "all"}) @Slf4j @DisallowConcurrentExecution -public class ExecutionJob extends TLogQuartzJobBean { +public class ExecutionJob extends QuartzJobBean { /** * 该处仅供参考 */ - @Autowired - @Qualifier("threadPoolExecutor") + @Resource + @Qualifier("meshandlerPool") private ThreadPoolExecutor EXECUTOR; - @Override - public void executeTask(JobExecutionContext context) throws JobExecutionException { + protected void executeInternal(JobExecutionContext context) throws JobExecutionException { SysQuartzJob quartzJob = (SysQuartzJob) context.getMergedJobDataMap().get(SysQuartzJob.JOB_KEY); // 获取spring bean ISysQuartzJobService quartzJobService = SpringContextHolder.getBean(SysQuartzJobServiceImpl.class); @@ -54,7 +50,7 @@ public class ExecutionJob extends TLogQuartzJobBean { String uuid = quartzJob.getUuid(); SysQuartzLog logDto = new SysQuartzLog(); - logDto.setLog_id(IdUtil.getSnowflake(1, 1).nextIdStr()); + logDto.setLog_id(IdUtil.getSnowflake(1,1).nextIdStr()); logDto.setJob_name(quartzJob.getJob_name()); logDto.setBean_name(quartzJob.getBean_name()); logDto.setMethod_name(quartzJob.getMethod_name()); @@ -63,8 +59,6 @@ public class ExecutionJob extends TLogQuartzJobBean { logDto.setCron_expression(quartzJob.getCron_expression()); try { // 执行任务 - System.out.println("--------------------------------------------------------------"); - System.out.println("任务开始执行,任务名称:" + quartzJob.getJob_name()); QuartzRunnable task = new QuartzRunnable(quartzJob.getBean_name(), quartzJob.getMethod_name(), quartzJob.getParams()); Future future = EXECUTOR.submit(task); @@ -76,8 +70,6 @@ public class ExecutionJob extends TLogQuartzJobBean { } // 任务状态 logDto.setIs_success(true); - System.out.println("任务执行完毕,任务名称:" + quartzJob.getJob_name() + ", 执行时间:" + times + "毫秒"); - System.out.println("--------------------------------------------------------------"); // 判断是否存在子任务 if (StrUtil.isNotEmpty(quartzJob.getSub_task())) { String[] tasks = quartzJob.getSub_task().split("[,,]"); @@ -88,13 +80,11 @@ public class ExecutionJob extends TLogQuartzJobBean { if (StrUtil.isNotEmpty(uuid)) { redisUtils.set(uuid, false); } - System.out.println("任务执行失败,任务名称:" + quartzJob.getJob_name()); - System.out.println("--------------------------------------------------------------"); long times = System.currentTimeMillis() - startTime; logDto.setTime(times); // 任务状态 0:成功 1:失败 logDto.setIs_success(false); - logDto.setException_detail(ThrowableUtil.getStackTrace(e)); + logDto.setException_detail(e.getMessage()); // 任务如果失败了则暂停 if (quartzJob.getPause_after_failure() != null && quartzJob.getPause_after_failure()) { quartzJob.setIs_pause(false); @@ -102,7 +92,7 @@ public class ExecutionJob extends TLogQuartzJobBean { quartzJobService.updateIsPause(quartzJob); } //异常时候打印日志 - log.info(logDto.toString()); + log.error(logDto.toString()); quartzLogMapper.insert(logDto); } finally { diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/secutiry/HandLoginService.java b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/secutiry/HandLoginService.java new file mode 100644 index 0000000..1c199a3 --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/secutiry/HandLoginService.java @@ -0,0 +1,22 @@ +package org.nl.system.service.secutiry; + +import java.util.Map; + +public interface HandLoginService { + /** + * 手持登陆 + * + * @param jsonObject 条件 + * @return Map + */ + Map handleLogin(Map jsonObject); + + /** + * 手持登陆查询权限 + * + * @param jsonObject 条件 + * @return Map + */ + Map queryAuthority(Map jsonObject); + +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/secutiry/dto/AuthUserDto.java b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/secutiry/dto/AuthUserDto.java index 9d810f0..bfb4a5a 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/secutiry/dto/AuthUserDto.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/secutiry/dto/AuthUserDto.java @@ -18,7 +18,7 @@ package org.nl.system.service.secutiry.dto; import lombok.Getter; import lombok.Setter; -import javax.validation.constraints.NotBlank; + /** * @author Zheng Jie @@ -28,10 +28,10 @@ import javax.validation.constraints.NotBlank; @Setter public class AuthUserDto { - @NotBlank + private String username; - @NotBlank + private String password; private String code; diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/secutiry/dto/OnlineUserDto.java b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/secutiry/dto/OnlineUserDto.java new file mode 100644 index 0000000..c1e93e0 --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/secutiry/dto/OnlineUserDto.java @@ -0,0 +1,74 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.system.service.secutiry.dto; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; + +/** + * 在线用户 + * @author Zheng Jie + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class OnlineUserDto { + + /** + * 用户名 + */ + private String userName; + + /** + * 昵称 + */ + private String nickName; + + /** + * 岗位 + */ + private String dept; + + /** + * 浏览器 + */ + private String browser; + + /** + * IP + */ + private String ip; + + /** + * 地址 + */ + private String address; + + /** + * token + */ + private String key; + + /** + * 登录时间 + */ + private Date loginTime; + + +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/secutiry/dto/UserDto.java b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/secutiry/dto/UserDto.java deleted file mode 100644 index 1aba3ce..0000000 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/secutiry/dto/UserDto.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright 2019-2020 Zheng Jie - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.nl.system.service.secutiry.dto; - -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; -import lombok.Getter; -import lombok.Setter; -import org.nl.common.base.BaseDTO; - -import java.io.Serializable; -import java.util.Date; - -/** - * @author Zheng Jie - * @date 2018-11-23 - */ -@Getter -@Setter -public class UserDto extends BaseDTO implements Serializable { - @JsonSerialize(using = ToStringSerializer.class) - private String id; - -// private Set roles; - - - private String username; - - private String personName; - - private String email; - - private String phone; - - private String gender; - - private String avatarName; - - private String avatarPath; - - private String extId; - - private String extuserId; - - - @JsonIgnore - private String password; - - private Boolean enabled; - - @JsonIgnore - private Boolean isAdmin = false; - - private Date pwdResetTime; -} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/common/security/config/bean/LoginCode.java b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/secutiry/entity/LoginCode.java similarity index 92% rename from nladmin-system/nlsso-server/src/main/java/org/nl/common/security/config/bean/LoginCode.java rename to nladmin-system/nlsso-server/src/main/java/org/nl/system/service/secutiry/entity/LoginCode.java index 489dfb7..be188a0 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/common/security/config/bean/LoginCode.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/secutiry/entity/LoginCode.java @@ -13,9 +13,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.nl.common.security.config.bean; +package org.nl.system.service.secutiry.entity; import lombok.Data; +import org.nl.system.service.secutiry.enums.LoginCodeEnum; /** * 登录验证码配置信息 @@ -58,4 +59,5 @@ public class LoginCode { public LoginCodeEnum getCodeType() { return codeType; } + } diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/common/security/config/bean/LoginProperties.java b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/secutiry/entity/LoginProperties.java similarity index 91% rename from nladmin-system/nlsso-server/src/main/java/org/nl/common/security/config/bean/LoginProperties.java rename to nladmin-system/nlsso-server/src/main/java/org/nl/system/service/secutiry/entity/LoginProperties.java index 97d0124..b67003a 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/common/security/config/bean/LoginProperties.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/secutiry/entity/LoginProperties.java @@ -13,14 +13,15 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.nl.common.security.config.bean; +package org.nl.system.service.secutiry.entity; import cn.hutool.core.util.StrUtil; import com.wf.captcha.*; import com.wf.captcha.base.Captcha; import lombok.Data; -import org.nl.common.exception.BadConfigurationException; -import org.nl.config.language.LangProcess; +import org.nl.common.exception.BadRequestException; +import org.nl.system.service.secutiry.enums.LoginCodeEnum; +import org.springframework.stereotype.Component; import java.awt.*; import java.util.Objects; @@ -32,6 +33,7 @@ import java.util.Objects; * @date loginCode.length0loginCode.length0/6/10 17:loginCode.length6 */ @Data +@Component public class LoginProperties { /** @@ -101,7 +103,7 @@ public class LoginProperties { captcha.setLen(loginCode.getLength()); break; default: - throw new BadConfigurationException(LangProcess.msg("login_codeError")); + throw new BadRequestException("验证码配置信息错误!正确配置查看 LoginCodeEnum "); } } if(StrUtil.isNotEmpty(loginCode.getFontName())){ diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/secutiry/enums/LoginCodeEnum.java b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/secutiry/enums/LoginCodeEnum.java new file mode 100644 index 0000000..893627f --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/secutiry/enums/LoginCodeEnum.java @@ -0,0 +1,21 @@ +package org.nl.system.service.secutiry.enums; + +public enum LoginCodeEnum { + /** + * 算数 + */ + arithmetic, + /** + * 中文 + */ + chinese, + /** + * 中文闪图 + */ + chinese_gif, + /** + * 闪图 + */ + gif, + spec +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/secutiry/impl/HandLoginServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/secutiry/impl/HandLoginServiceImpl.java new file mode 100644 index 0000000..bfe8517 --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/secutiry/impl/HandLoginServiceImpl.java @@ -0,0 +1,73 @@ +package org.nl.system.service.secutiry.impl; + +import cn.dev33.satoken.secure.SaSecureUtil; +import cn.dev33.satoken.stp.SaLoginModel; +import cn.dev33.satoken.stp.StpUtil; +import cn.hutool.core.lang.Assert; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.RedisUtils; +import org.nl.common.utils.RsaUtils; +import org.nl.common.utils.dto.CurrentUser; +import org.nl.system.service.role.ISysRoleService; +import org.nl.system.service.secutiry.HandLoginService; +import org.nl.system.service.user.ISysUserService; +import org.nl.system.service.user.dao.SysUser; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; + +@Service +@Slf4j +public class HandLoginServiceImpl implements HandLoginService { + @Autowired + private RedisUtils redisUtils; + @Autowired + private ISysUserService iSysUserService; + @Autowired + private ISysRoleService roleService; + + + @SneakyThrows + @Override + public Map handleLogin(Map param) { + Assert.notNull(param,"请求参数不能为空"); + SysUser userInfo = iSysUserService.getOne(new QueryWrapper().eq("username",param.get("user"))); + if (userInfo == null||!userInfo.getPassword().equals(SaSecureUtil.md5BySalt(RsaUtils.decryptByPrivateKey(RsaUtils.KEY, param.get("password")), "salt"))) { // 这里需要密码加密 + throw new BadRequestException("账号或密码错误"); + } + if (!userInfo.getIs_used()) { + throw new BadRequestException("账号未激活"); + } + List permissionList = roleService.getPermissionList((JSONObject) JSON.toJSON(userInfo)); + // 登录输入,登出删除 + CurrentUser user = new CurrentUser(); + user.setId(userInfo.getUser_id()); + user.setUsername(userInfo.getUsername()); + user.setPresonName((userInfo.getPerson_name())); + user.setUser(userInfo); + user.setPermissions(permissionList); + // SaLoginModel 配置登录相关参数 + StpUtil.login(userInfo.getUser_id(), new SaLoginModel() + .setDevice("PC") // 此次登录的客户端设备类型, 用于[同端互斥登录]时指定此次登录的设备类型 + .setExtra("loginInfo", JSONObject.toJSONString(user)) // Token挂载的扩展参数 (此方法只有在集成jwt插件时才会生效) + ); + JSONObject result = new JSONObject(); + result.put("token", StpUtil.getTokenValue()); + result.put("roles", permissionList); + result.put("user", user); + return result; + + } + + @Override + public Map queryAuthority(Map jsonObject) { + return null; + } +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/secutiry/impl/OnlineUserService.java b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/secutiry/impl/OnlineUserService.java deleted file mode 100644 index e86d31c..0000000 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/secutiry/impl/OnlineUserService.java +++ /dev/null @@ -1,299 +0,0 @@ -/* - * Copyright 2019-2020 Zheng Jie - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.nl.system.service.secutiry.impl; - -import cn.dev33.satoken.secure.SaSecureUtil; -import cn.dev33.satoken.stp.SaLoginModel; -import cn.dev33.satoken.stp.StpUtil; -import cn.hutool.core.util.ObjectUtil; -import cn.hutool.core.util.StrUtil; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import lombok.SneakyThrows; -import lombok.extern.slf4j.Slf4j; -import org.nl.common.utils.*; -import org.nl.config.RsaProperties; -import org.nl.common.exception.BadRequestException; -import org.nl.common.utils.dto.CurrentUser; -import org.nl.config.language.LangProcess; -import org.nl.system.service.dept.ISysDeptService; -import org.nl.system.service.dept.dao.SysDept; -import org.nl.system.service.secutiry.dto.UserDto; -import org.nl.system.service.role.ISysRoleService; -import org.nl.system.service.secutiry.dto.AuthUserDto; -import org.nl.system.service.user.ISysUserService; -import org.nl.system.service.user.dao.SysUser; -import org.nl.system.service.user.dto.OnlineUserDto; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.domain.Pageable; -import org.springframework.scheduling.annotation.Async; -import org.springframework.stereotype.Service; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; -import java.util.*; - -/** - * @author Zheng Jie - * @date 2019年10月26日21:56:27 - */ -@Service -@Slf4j -public class OnlineUserService { - - @Autowired - private ISysUserService sysUserService; - @Autowired - private ISysDeptService deptService; - @Autowired - private ISysRoleService roleService; - @Autowired - private RedisUtils redisUtils; - - public OnlineUserService(RedisUtils redisUtils) { - this.redisUtils = redisUtils; - } - - /** - * 保存在线用户信息 - * @param userDto / - * @param token / - * @param request / - */ - public void save(SysUser userDto, String token, HttpServletRequest request){ - // 获取用户部门 - List userDeptByUserId = deptService.getUserDeptByUserId(userDto.getUser_id()); - StringBuilder sb = new StringBuilder(); - for (SysDept dept : userDeptByUserId) { - sb.append(dept.getName()).append("、"); - } - if (sb.length() > 0) { - sb.setLength(sb.length() - 1); - } - String dept = sb.toString(); - String ip = StringUtils.getIp(request); - String browser = StringUtils.getBrowser(request); - String address = StringUtils.getCityInfo(ip); - OnlineUserDto onlineUserDto = null; - try { - onlineUserDto = new OnlineUserDto(userDto.getUsername(), userDto.getPerson_name(), dept, browser , ip, address, EncryptUtils.desEncrypt(token), new Date()); - } catch (Exception e) { - log.error(e.getMessage(),e); - } - redisUtils.set("oline-" + userDto.getUsername(), onlineUserDto, StpUtil.getTokenTimeout()); - } - - /** - * 查询全部数据 - * @param filter / - * @param pageable / - * @return / - */ - public Map getAll(String filter, Pageable pageable){ - List onlineUserDtos = getAll(filter); - return PageUtil.toPage( - PageUtil.toPage(pageable.getPageNumber(),pageable.getPageSize(), onlineUserDtos), - onlineUserDtos.size() - ); - } - - /** - * 查询全部数据,不分页 - * @param filter / - * @return / - */ - public List getAll(String filter){ - List keys = redisUtils.scan("oline-*"); - Collections.reverse(keys); - List onlineUserDtos = new ArrayList<>(); - for (String key : keys) { - OnlineUserDto onlineUserDto = (OnlineUserDto) redisUtils.get(key); - onlineUserDtos.add(onlineUserDto); - } - onlineUserDtos.sort((o1, o2) -> o2.getLoginTime().compareTo(o1.getLoginTime())); - return onlineUserDtos; - } - - /** - * 踢出用户 - * @param key: OnlineUserDto / - */ - public void kickOut(OnlineUserDto key) { - // 获取用户 - SysUser one = sysUserService.getOne(new LambdaQueryWrapper().eq(SysUser::getUsername, key.getUserName())); - if (ObjectUtil.isNotEmpty(one)) { - redisUtils.del("oline-" + one.getUsername()); - } - // 通过token强退 - StpUtil.logoutByTokenValue(key.getKey()); - } - - /** - * 踢出用户 - * @param key:token / - */ - public void kickOut(String key) { - redisUtils.del(key); - // 通过token强退 - StpUtil.logoutByTokenValue(key); - } - - /** - * 退出登录 - * @param token / - */ - public void logout(String token) { - redisUtils.del(token); - } - - /** - * 导出 - * @param all / - * @param response / - * @throws IOException / - */ - public void download(List all, HttpServletResponse response) throws IOException { - List> list = new ArrayList<>(); - for (OnlineUserDto user : all) { - Map map = new LinkedHashMap<>(); - map.put("用户名", user.getUserName()); - map.put("部门", user.getDept()); - map.put("登录IP", user.getIp()); - map.put("登录地点", user.getAddress()); - map.put("浏览器", user.getBrowser()); - map.put("登录日期", user.getLoginTime()); - list.add(map); - } - FileUtil.downloadExcel(list, response); - } - - /** - * 查询用户 - * @param key / - * @return / - */ - public OnlineUserDto getOne(String key) { - return (OnlineUserDto)redisUtils.get(key); - } - - /** - * 检测用户是否在之前已经登录,已经登录踢下线 - * @param userName 用户名 - */ - public void checkLoginOnUser(String userName, String igoreToken){ - List onlineUserDtos = getAll(userName); - if(onlineUserDtos ==null || onlineUserDtos.isEmpty()){ - return; - } - for(OnlineUserDto onlineUserDto : onlineUserDtos){ - if(onlineUserDto.getUserName().equals(userName)){ - try { - String token =EncryptUtils.desDecrypt(onlineUserDto.getKey()); - if(StrUtil.isNotEmpty(igoreToken)&&!igoreToken.equals(token)){ - this.kickOut(token); - }else if(StrUtil.isEmpty(igoreToken)){ - this.kickOut(token); - } - } catch (Exception e) { - log.error("checkUser is error",e); - } - } - } - } - - /** - * 根据用户名强退用户 - * @param username / - */ - @Async - public void kickOutForUsername(String username) throws Exception { - List onlineUsers = getAll(username); - for (OnlineUserDto onlineUser : onlineUsers) { - if (onlineUser.getUserName().equals(username)) { - String token = EncryptUtils.desDecrypt(onlineUser.getKey()); - kickOut(token); - } - } - } - @SneakyThrows - public Map login(Map paramMap, HttpServletRequest request){ - // 密码解密 - 前端的加密规则: encrypt - AuthUserDto authUser = JSON.toJavaObject((JSON) JSON.toJSON(paramMap), AuthUserDto.class); - String password = RsaUtils.decryptByPrivateKey(RsaProperties.privateKey, authUser.getPassword()); - // 查询验证码 - String code = (String) redisUtils.get(authUser.getUuid()); - // 清除验证码 - redisUtils.del(authUser.getUuid()); - if (StrUtil.isEmpty(code)) { - throw new BadRequestException(LangProcess.msg("login_CodeNull")); - } - if (StrUtil.isEmpty(authUser.getCode()) || !authUser.getCode().equalsIgnoreCase(code)) { - throw new BadRequestException(LangProcess.msg("login_CodeError")); - } - - /* - * 校验数据库 - * username:根据用户名查询,在比对密码 - * SaSecureUtil.md5BySalt(password, "salt"): 这里需要密码加密 - */ - String salt = "salt"; - SysUser userInfo = sysUserService.getOne(new QueryWrapper().eq("username",authUser.getUsername())); - if (userInfo == null||!userInfo.getPassword().equals(SaSecureUtil.md5BySalt(password, salt))) { - throw new BadRequestException(LangProcess.msg("login_pwd")); - } - - // 获取权限列表 - 登录查找权限 - List permissionList = roleService.getPermissionList((JSONObject) JSON.toJSON(userInfo)); - - - if (!userInfo.getIs_used()) { - throw new BadRequestException(LangProcess.msg("login_account")); - } - - // 登录输入,登出删除 - CurrentUser user = new CurrentUser(); - user.setId(userInfo.getUser_id()); - user.setUsername(userInfo.getUsername()); - user.setPresonName((userInfo.getPerson_name())); - user.setUser(userInfo); - user.setPermissions(permissionList); - - /* - * SaLoginModel 配置登录相关参数 - * PC: 此次登录的客户端设备类型, 用于[同端互斥登录]时指定此次登录的设备类型 - * loginInfo: Token挂载的扩展参数 (此方法只有在集成jwt插件时才会生效) - */ - StpUtil.login(userInfo.getUser_id(), new SaLoginModel() - .setDevice("PC") - .setExtra("loginInfo", user) - ); - - // 返回 token 与 用户信息 - JSONObject jsonObject = new JSONObject(); - jsonObject.put("roles", permissionList); - jsonObject.put("user", userInfo); - Map authInfo = new HashMap(2) {{ - put("token", "Bearer " + StpUtil.getTokenValue()); - put("user", user); - }}; - // 保存在线信息 - this.save(userInfo, StpUtil.getTokenValue(), request); - return authInfo; - } -} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/user/ISysUserService.java b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/user/ISysUserService.java index 3c76802..6c1a34b 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/user/ISysUserService.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/user/ISysUserService.java @@ -1,5 +1,6 @@ package org.nl.system.service.user; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.extension.service.IService; import org.nl.common.domain.query.PageQuery; import org.nl.system.service.user.dao.SysUser; @@ -80,4 +81,6 @@ public interface ISysUserService extends IService { * @return List */ List getUserIdByDeptId(String deptId); + + JSONObject login(JSONObject userDetail); } diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/user/impl/ISysUserServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/user/impl/ISysUserServiceImpl.java index 9f025f6..f4952fd 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/user/impl/ISysUserServiceImpl.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/user/impl/ISysUserServiceImpl.java @@ -1,19 +1,28 @@ package org.nl.system.service.user.impl; import cn.dev33.satoken.secure.SaSecureUtil; +import cn.dev33.satoken.stp.SaLoginModel; +import cn.dev33.satoken.stp.StpUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.SneakyThrows; import org.apache.commons.beanutils.ConvertUtils; import org.nl.common.domain.query.PageQuery; +import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.RedisUtils; +import org.nl.common.utils.RsaUtils; +import org.nl.common.utils.dto.CurrentUser; import org.nl.config.FileProperties; import org.nl.common.utils.FileUtil; import org.nl.common.utils.SecurityUtils; import org.nl.config.IdUtil; import org.nl.system.service.dept.ISysDeptService; import org.nl.system.service.role.ISysRoleService; +import org.nl.system.service.secutiry.dto.AuthUserDto; import org.nl.system.service.user.ISysUserService; import org.nl.system.service.user.dao.SysUser; import org.nl.system.service.user.dao.mapper.SysUserMapper; @@ -50,6 +59,8 @@ public class ISysUserServiceImpl extends ServiceImpl imp private ISysDeptService deptService; @Autowired private ISysRoleService roleService; + @Autowired + private RedisUtils redisUtils; @Override public Map updateAvatar(MultipartFile multipartFile) { @@ -156,4 +167,43 @@ public class ISysUserServiceImpl extends ServiceImpl imp public List getUserIdByDeptId(String deptId) { return sysUserMapper.getUserIdByDeptId(deptId); } + @Override + public JSONObject login(JSONObject userDetail) { + AuthUserDto authUser = userDetail.toJavaObject(AuthUserDto.class); + // 查询验证码 + String code = (String) redisUtils.get(authUser.getUuid()); + redisUtils.del(authUser.getUuid()); +// if (StrUtil.isEmpty(code)) { +// throw new BadRequestException("验证码不存在或已过期"); +// } +// if (StrUtil.isEmpty(authUser.getCode()) || !authUser.getCode().equalsIgnoreCase(code)) { +// throw new BadRequestException("验证码错误"); +// } + SysUser userInfo = this.getOne(new QueryWrapper().eq("username",authUser.getUsername())); + if (userInfo == null||!userInfo.getPassword().equals(SaSecureUtil.md5BySalt(RsaUtils.decryptByPrivateKey(RsaUtils.KEY, authUser.getPassword()), "salt"))) { // 这里需要密码加密 + throw new BadRequestException("账号或密码错误"); + } + if (!userInfo.getIs_used()) { + throw new BadRequestException("账号未激活"); + } + List permissionList = roleService.getPermissionList((JSONObject) JSON.toJSON(userInfo)); + // 登录输入,登出删除 + CurrentUser user = new CurrentUser(); + user.setId(userInfo.getUser_id()); + user.setUsername(userInfo.getUsername()); + user.setPresonName((userInfo.getPerson_name())); + user.setUser(userInfo); + user.setPermissions(permissionList); + // SaLoginModel 配置登录相关参数 + StpUtil.login(userInfo.getUser_id(), new SaLoginModel() + .setDevice("PC") // 此次登录的客户端设备类型, 用于[同端互斥登录]时指定此次登录的设备类型 + .setExtra("loginInfo", JSONObject.toJSONString(user)) // Token挂载的扩展参数 (此方法只有在集成jwt插件时才会生效) + ); + JSONObject result = new JSONObject(); + result.put("token", StpUtil.getTokenValue()); + result.put("roles", permissionList); + result.put("user", user); + return result; + } + } diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/MdPbClassstandardServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/MdPbClassstandardServiceImpl.java index ff7818b..88f6bf2 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/MdPbClassstandardServiceImpl.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/MdPbClassstandardServiceImpl.java @@ -9,7 +9,6 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.sun.xml.bind.v2.model.core.ID; import org.nl.common.exception.BadRequestException; import org.nl.common.utils.IdUtil; import org.nl.common.utils.PageUtil; diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/AutoSendTask.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/AutoSendTask.java deleted file mode 100644 index a47965e..0000000 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/AutoSendTask.java +++ /dev/null @@ -1,60 +0,0 @@ -package org.nl.wms.sch_manage.service.util; - -import lombok.SneakyThrows; -import lombok.extern.slf4j.Slf4j; -import org.nl.config.SpringContextHolder; -import org.reflections.Reflections; -import org.springframework.core.annotation.Order; -import org.springframework.stereotype.Component; - -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.Set; - -/** - *

- * 任务自动下发 - *

- * - * @author Liuxy - * @since 2025-06-09 - */ -@Slf4j -@Component -@Order(value = 1) -public class AutoSendTask { - private static Set> subTypes = null; - // 类加载时候执行扫描 - static { - Reflections reflections = new Reflections("org.nl.wms.sch_manage.service.util.tasks"); - subTypes = reflections.getSubTypesOf(AbstractTask.class); - } - - @SneakyThrows - public void run() { - log.debug("定时任务AutoCreateTask开始执行:"); - this.doExecute(); - } - - /** - * 需要按照任务配置类型并行执行 - */ - private void doExecute() { - subTypes.forEach(clz -> { - // 调用AbstractAcsTask类的每个子类的schedule()方法 - try { - Object obj = SpringContextHolder.getBean(clz); - Method m = obj.getClass().getMethod("schedule"); - m.invoke(obj); - } catch (InvocationTargetException e) { - e.printStackTrace(); - log.info("定时器执行失败:{}", e.getTargetException().getMessage()); - } catch (Exception e) { - e.printStackTrace(); - log.info("定时器执行失败:{}", e.getMessage()); - } - }); - } - -} - diff --git a/nladmin-system/nlsso-server/src/main/resources/META-INF/druid-filter.properties b/nladmin-system/nlsso-server/src/main/resources/META-INF/druid-filter.properties new file mode 100644 index 0000000..f54c833 --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/resources/META-INF/druid-filter.properties @@ -0,0 +1 @@ +druid.filters.DruidFilter=org.nl.config.mybatis.DruidFilter diff --git a/nladmin-system/nlsso-server/src/main/resources/META-INF/services/org.dromara.dynamictp.core.monitor.collector.MetricsCollector b/nladmin-system/nlsso-server/src/main/resources/META-INF/services/org.dromara.dynamictp.core.monitor.collector.MetricsCollector deleted file mode 100644 index ca36075..0000000 --- a/nladmin-system/nlsso-server/src/main/resources/META-INF/services/org.dromara.dynamictp.core.monitor.collector.MetricsCollector +++ /dev/null @@ -1 +0,0 @@ -# org.nl.config.thread.ThreadMonitorCollector diff --git a/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml b/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml index a1f5502..a03f549 100644 --- a/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml +++ b/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml @@ -1,16 +1,17 @@ server: - port: 8099 - max-http-header-size: 65536 + port: 8011 #配置数据源 spring: + main: + allow-bean-definition-overriding: true + allow-circular-references: true datasource: druid: db-type: com.alibaba.druid.pool.DruidDataSource driverClassName: com.mysql.cj.jdbc.Driver - # url: jdbc:mysql://${DB_HOST:192.168.8.218}:${DB_PORT:3306}/${DB_NAME:wms}?serverTimxezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false - url: jdbc:mysql://192.168.81.251:3306/wms_oulun?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false - username: root - password: 123456 + url: jdbc:mysql://${DB_HOST:192.168.81.251}:${DB_PORT:3306}/${DB_NAME:wms_oulun}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false + username: ${DB_USER:root} + password: ${DB_PWD:123456} # 初始连接数 initial-size: 15 # 最小连接数 @@ -66,6 +67,7 @@ spring: address: redis://127.0.0.1:6379 idleConnectionTimeout: 10000 timeout: 3000 + # 登录相关配置 login: # 登录缓存 diff --git a/nladmin-system/nlsso-server/src/main/resources/config/application-prod.yml b/nladmin-system/nlsso-server/src/main/resources/config/application-prod.yml deleted file mode 100644 index 9ee61a8..0000000 --- a/nladmin-system/nlsso-server/src/main/resources/config/application-prod.yml +++ /dev/null @@ -1,30 +0,0 @@ -server: - port: 8011 -# 项目配置 -nl: - config: - mysql: - ip: 127.0.0.1 - port: 3306 - username: root - password: 12356 - database: nl-platform - redis: - ip: 127.0.0.1 - port: 6379 - password: null - database: 1 - oracle: - ip: 172.27.37.66 - port: 1521 - scheme: RTMES - username: LMSTELCOM - password: LMSTELCOM_6463 - sqlserver: - ip: 10.93.41.2 - port: WINCC - username: sa - password: 123 - database: 马钢_RH - logging-path: C:\log\wms - dynamic-log-path: C:\log\lms diff --git a/nladmin-system/nlsso-server/src/main/resources/config/application.yml b/nladmin-system/nlsso-server/src/main/resources/config/application.yml index dd7eb9d..c8fa65e 100644 --- a/nladmin-system/nlsso-server/src/main/resources/config/application.yml +++ b/nladmin-system/nlsso-server/src/main/resources/config/application.yml @@ -2,18 +2,16 @@ server: tomcat: relaxed-query-chars: [ '|','{','}','[',']' ] #字符问题:https://blog.csdn.net/CanYue_Yi/article/details/109182577 relaxed-path-chars: [ '|','{','}','[',']' ] #字符问题: https://blog.csdn.net/weixin_41996632/article/details/90715118 -lucene: - index: - path: D:\lucene\index + max-http-header-size: 65535 spring: - profiles: - active: dev - autoconfigure: - exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure + main: + allow-bean-definition-overriding: true messages: - basename: language/login/login,language/error/error,language/buss/buss,language/task/task + basename: language/common/common,language/status/status,language/login/login,language/error/error,language/buss/buss,language/task/task,language/monitor/one_device/one_device,language/monitor/two_device/two_device,language/monitor/universal/universal freemarker: check-template-location: false + profiles: + active: dev jackson: time-zone: GMT+8 data: @@ -83,6 +81,7 @@ security: - /**/*.css - /**/*.js - /favicon.ico + - /auth/code - /*/api-docs - /*/api-docs/** # druid 监控配置 @@ -107,3 +106,7 @@ mybatis-plus: db-config: id-type: INPUT banner: false + +lucene: + index: + path: D:\lucene\index diff --git a/nladmin-system/nlsso-server/src/main/resources/log4jdbc.log4j2.properties b/nladmin-system/nlsso-server/src/main/resources/log4jdbc.log4j2.properties deleted file mode 100644 index 302525f..0000000 --- a/nladmin-system/nlsso-server/src/main/resources/log4jdbc.log4j2.properties +++ /dev/null @@ -1,4 +0,0 @@ -# If you use SLF4J. First, you need to tell log4jdbc-log4j2 that you want to use the SLF4J logger -log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator -log4jdbc.auto.load.popular.drivers=false -log4jdbc.drivers=com.mysql.cj.jdbc.Driver \ No newline at end of file diff --git a/nladmin-system/nlsso-server/src/main/resources/logback-spring.xml b/nladmin-system/nlsso-server/src/main/resources/logback-spring.xml index f51170f..d0b15fc 100644 --- a/nladmin-system/nlsso-server/src/main/resources/logback-spring.xml +++ b/nladmin-system/nlsso-server/src/main/resources/logback-spring.xml @@ -1,44 +1,30 @@ - nlAdmin + value="%black(%contextName-) %red(%d{yyyy-MM-dd HH:mm:ss.SSS}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{36}) - %gray(%msg%n)"/> - - - - + - + true ${log.pattern} - - - ${LOG_HOME}/%d{yyyy-MM-dd}.%i.log - 30 + 10 - 120MB + 100MB 20GB @@ -46,179 +32,140 @@ https://juejin.cn/post/6844903775631572999 %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n - - - - DEBUG - ACCEPT - DENY - + + + + ${LOG_HOME}/ErpLog/%d{yyyy-MM-dd}.%i.log + + 7 + + 100MB + + 20GB + + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n + - - - - 512 - - - 0 + 2 500 + + 2 + 500 + + + + + + system + lms + + + logLevel + %level + + + requestMethod + %X{requestMethod} + + + requestTime + %d{yyyy-MM-dd HH:mm:ss.SSS} + + + requestIp + %X{requestIp} + + + thread + %thread + + + logger + %logger + + + + + + 512 + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - - + + - - + + - + - + - - + + - - + + - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/nladmin-system/nlsso-server/src/test/java/org/nl/ApplicationTest.java b/nladmin-system/nlsso-server/src/test/java/org/nl/ApplicationTest.java deleted file mode 100644 index 576339b..0000000 --- a/nladmin-system/nlsso-server/src/test/java/org/nl/ApplicationTest.java +++ /dev/null @@ -1,41 +0,0 @@ -package org.nl; - -import com.alibaba.fastjson.JSONObject; -import com.alibaba.fastjson2.JSON; -import com.alibaba.fastjson2.TypeReference; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.context.SpringBootTest; - -import java.util.Map; - -/** - * @Author: lyd - * @Description: 单元测试 - * @Date: 2023/5/15 - */ -@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) -public class ApplicationTest { - - @Test - void contextLoads() { - } - - @Test - void testJSONToMap() { - JSONObject pa = new JSONObject(); - JSONObject pa2 = new JSONObject(); - pa2.put("a", 2); - pa.put("name", "lyd"); - pa.put("age", pa2); - String jsonString = pa.toJSONString(); - - // 使用Fastjson解析JSON字符串 - Map map = JSON.parseObject(jsonString, new TypeReference>() {}); - - // 输出Map - for (Map.Entry entry : map.entrySet()) { - System.out.println(entry.getKey() + " : " + entry.getValue()); - } - } - -} diff --git a/nladmin-system/nlsso-server/src/test/java/org/nl/ext/StorageManager.java b/nladmin-system/nlsso-server/src/test/java/org/nl/ext/StorageManager.java deleted file mode 100644 index 849fce3..0000000 --- a/nladmin-system/nlsso-server/src/test/java/org/nl/ext/StorageManager.java +++ /dev/null @@ -1,36 +0,0 @@ -package org.nl.ext; - -/** - * @Author: lyd - * @Description: - * @Date: 2023/9/18 - */ -public class StorageManager { - private int requestCount = 0; - - public String allocateStorage() { - requestCount++; - if (requestCount >= 1 && requestCount <= 5) { - return "上货位"; - } else if (requestCount >= 6 && requestCount <= 10) { - return "下货位"; - } else { - // 如果请求次数大于10,循环上下 - requestCount = 1; - return "上货位"; - } - } - - public static void main(String[] args) { - StorageManager manager = new StorageManager(); - - // 模拟外部系统的请求 - for (int i = 1; i <= 23; i++) { - new Thread(() -> { - String storage = manager.allocateStorage(); - System.out.println("第 " + Thread.currentThread().getName() + " 次请求,分配到:" + storage); - }).start(); - } - } -} - diff --git a/nladmin-system/nlsso-server/src/test/java/org/nl/point/PointCreate.java b/nladmin-system/nlsso-server/src/test/java/org/nl/point/PointCreate.java deleted file mode 100644 index 555dc72..0000000 --- a/nladmin-system/nlsso-server/src/test/java/org/nl/point/PointCreate.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.nl.point; - -import org.springframework.boot.test.context.SpringBootTest; - -/** - * @Author: lyd - * @Description: 创建点位 - * @Date: 2023/6/15 - */ -@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) -public class PointCreate { - -} diff --git a/nladmin-system/pom.xml b/nladmin-system/pom.xml index addcceb..84da570 100644 --- a/nladmin-system/pom.xml +++ b/nladmin-system/pom.xml @@ -5,7 +5,7 @@ org.springframework.boot spring-boot-starter-parent - 2.2.10.RELEASE + 2.6.2 4.0.0 diff --git a/nladmin-ui/package.json b/nladmin-ui/package.json index 1912240..361f471 100644 --- a/nladmin-ui/package.json +++ b/nladmin-ui/package.json @@ -6,6 +6,7 @@ "license": "Apache-2.0", "scripts": { "dev": "vue-cli-service serve", + "dev_mac": "export NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve", "build:prod": "vue-cli-service build", "build:stage": "vue-cli-service build --mode staging", "preview": "node build/index.js --preview", diff --git a/nladmin-ui/public/config.js b/nladmin-ui/public/config.js index 441302a..8db2f1c 100644 --- a/nladmin-ui/public/config.js +++ b/nladmin-ui/public/config.js @@ -1,9 +1,9 @@ window.g = { dev: { - VUE_APP_BASE_API: 'http://127.0.0.1:8010' + VUE_APP_BASE_API: 'http://127.0.0.1:8013' }, prod: { - VUE_APP_BASE_API: 'http://127.0.0.1:8010' + VUE_APP_BASE_API: 'http://127.0.0.1:8013' } } diff --git a/nladmin-ui/src/utils/request.js b/nladmin-ui/src/utils/request.js index 7589044..1855b52 100644 --- a/nladmin-ui/src/utils/request.js +++ b/nladmin-ui/src/utils/request.js @@ -11,19 +11,16 @@ const baseURLStr = window.g.prod.VUE_APP_BASE_API // 创建axios实例 const service = axios.create({ baseURL: process.env.NODE_ENV === 'production' ? baseURLStr : '/', // api 的 base_url - timeout: Config.timeout, // 请求超时时间 - withCredentials: true + timeout: Config.timeout // 请求超时时间 }) // request拦截器 service.interceptors.request.use( config => { - const lang = localStorage.getItem('lang') if (getToken()) { - config.headers['Authorization'] = getToken() ? 'Bearer ' + getToken() : undefined // 让每个请求携带自定义token 请根据实际情况自行修改 + config.headers['Authorization'] = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改 } config.headers['Content-Type'] = 'application/json' - config.headers['Accept-Language'] = lang return config }, error => { @@ -42,7 +39,7 @@ service.interceptors.response.use( const reader = new FileReader() reader.readAsText(error.response.data, 'utf-8') reader.onload = function(e) { - const errorMsg = JSON.parse(reader.result).message + const errorMsg = JSON.parse(reader.result).msg Notification.error({ title: errorMsg, duration: 5000 @@ -51,7 +48,7 @@ service.interceptors.response.use( } else { let code = 0 try { - code = error.response.data.status + code = error.response.data.code } catch (e) { if (error.toString().indexOf('Error: timeout') !== -1) { Notification.error({ @@ -72,7 +69,7 @@ service.interceptors.response.use( } else if (code === 403) { router.push({ path: '/401' }) } else { - const errorMsg = error.response.data.message + const errorMsg = error.response.data.msg if (errorMsg !== undefined) { Notification.error({ title: errorMsg,