This commit is contained in:
ytChen 2024-05-06 15:10:22 +08:00
parent bf9b1abec6
commit 73a58a8041
48 changed files with 10 additions and 437 deletions

View File

@ -8,11 +8,13 @@ import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
@EnableDiscoveryClient
@RefreshScope
@EnableFeignClients
@EnableScheduling
@EnableDynamicTp
@ComponentScan(basePackages = {"com.recovery.admin.boot","com.recovery.common.base"})
@MapperScan("com.recovery.admin.boot.mapper")

View File

@ -51,7 +51,7 @@ public class WebLogAspect {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
//获取请求的域名
HttpServletRequest request = attributes.getRequest();
// 根据域名获取网站信息
// 根据域名获取c网站信息
StringBuffer urlBuf = request.getRequestURL();
URL url = new URL(urlBuf.toString());
String path = url.getPath();

View File

@ -116,32 +116,7 @@ public class GlobalExceptionHandler {
return ApiResult.failed("请求方式不支持");
}
/**
* 未登录异常
*/
@ExceptionHandler(NotLoginException.class)
public ApiResult notLoginException(NotLoginException e) {
return ApiResult.failed(ResultCode.LOGIN_ERROR);
}
/**
* 通用异常
*/
@ResponseStatus(HttpStatus.OK)
@ExceptionHandler(Exception.class)
public ApiResult exception(Exception e) {
if (e instanceof NotPermissionException){
return ApiResult.failed("没有操作权限");
}
e.printStackTrace();
return ApiResult.failed(ResultCode.ACCESS_UNAUTHORIZED);
}
//Security
// @ExceptionHandler(value = AccessDeniedException.class)
// public void accessDeniedException(AccessDeniedException e) {
// throw e;
// }
}

View File

@ -31,7 +31,7 @@ public class UserRest {
* 获取用户信息
*/
@GetMapping("/getUserByUsername")
public ApiResult<UserAuthDTO> getUserByUsername(@RequestParam String username) {
public ApiResult<UserAuthDTO> getUserByUsername(@RequestParam(value = "username") String username) {
UserAuthDTO user = iSysUserService.getByUsername(username);
if (user == null) {
throw new RuntimeException();
@ -42,7 +42,7 @@ public class UserRest {
* 获取会员用户信息
*/
@GetMapping("/member/username/{username}")
public ApiResult<MemberUserAuthDTO> getMemberUserByUsername(@PathVariable String username) {
public ApiResult<MemberUserAuthDTO> getMemberUserByUsername(@RequestParam(value = "username") String username) {
log.info("获取member user info。。。");
MemberUserAuthDTO user = memberUserService.getByUsername(username);
return ApiResult.ok(user);

View File

@ -1,78 +0,0 @@
spring:
application:
name: hoe-admin
main:
allow-bean-definition-overriding: true
profiles:
active: dev
cloud:
nacos:
discovery:
# metadata:
# serviceGroup: ytChen
server-addr: localhost:8848
namespace: 11bfd099-10d6-4f2c-b969-58b76e435cce
config:
server-addr: localhost:8848
file-extension: yaml
prefix: hoe-admin
group: dev
namespace: 11bfd099-10d6-4f2c-b969-58b76e435cce
dynamic:
tp:
enabled: true
enabledBanner: true # 是否开启banner打印默认true
enabledCollect: true # 是否开启监控指标采集默认false
collectorTypes: micrometer,logging # 监控数据采集器类型logging | micrometer | internal_logging默认micrometer
logPath: /home/logs # 监控日志数据路径,默认 ${user.home}/logs采集类型非logging不用配置
monitorInterval: 5 # 监控时间间隔报警判断、指标采集默认5s
platforms: # 通知报警平台配置
- platform: email
receivers: 1650611030@qq.com
tomcatTp: # tomcat webserver线程池配置
corePoolSize: 100
maximumPoolSize: 200
keepAliveTime: 60
executors: # 动态线程池配置
- threadPoolName: dtpExecutor
# 线程池别名
executorType: common # 线程池类型common、eager适用于io密集型
corePoolSize: 5 # 核心线程数
maximumPoolSize: 18 # 最大线程数
queueCapacity: 400 # 任务队列容量
queueType: VariableLinkedBlockingQueue # 任务队列查看源码QueueTypeEnum枚举类
rejectedHandlerType: CallerRunsPolicy # 拒绝策略查看RejectedTypeEnum枚举类
keepAliveTime: 50
allowCoreThreadTimeOut: false # 是否允许核心线程池超时
threadNamePrefix: test # 线程名前缀
waitForTasksToCompleteOnShutdown: false # 参考spring线程池设计优雅关闭线程池
awaitTerminationSeconds: 5 # 单位s
preStartAllCoreThreads: false # 是否预热所有核心线程默认false
runTimeout: 200 # 任务执行超时阈值目前只做告警用单位ms
queueTimeout: 100 # 任务在队列等待超时阈值目前只做告警用单位ms
taskWrapperNames: [ "ttl" ] # 任务包装器名称集成TaskWrapper接口
notifyItems: # 报警项,不配置自动会按默认值配置(变更通知、容量报警、活性报警、拒绝报警、任务超时报警)
- type: capacity # 报警项类型,查看源码 NotifyTypeEnum枚举类
enabled: true
threshold: 80 # 报警阈值
platforms: [ ding,wechat ] # 可选配置不配置默认拿上层platforms配置的所以平台
interval: 120 # 报警间隔单位s
- type: change
enabled: true
- type: liveness
enabled: true
threshold: 80
- type: reject
enabled: true
threshold: 1
- type: run_timeout
enabled: true
threshold: 1
- type: queue_timeout
enabled: true
threshold: 1
server:
port: 9002

View File

@ -1,53 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<contextName>logback</contextName>
<property name="SYS_LOG_DIR" value="logs" />
<property name="LOG_FILE" value="demo.log" />
<property name="fileLayoutPattern"
value="%-20(%d{yyyyMMdd_HH:mm:ss.SSS} [%logger{10}][%thread] [%-4relative])
[%X{hostName} %X{requestId} %X{processId} %X{service.timing} ][%level] %msg%n" />
<property name="consoleLayoutPattern"
value="%-20(%d{yyyyMMdd_HH:mm:ss.SSS} [%logger][%thread] [%-4relative])
[%X{hostName} %X{requestId} %X{processId} %X{service.timing} ][%level] %msg%n" />
<!-- 控制台输出 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<layout name="StandardFormat" class="ch.qos.logback.classic.PatternLayout">
<pattern>${consoleLayoutPattern}</pattern>
</layout>
</appender>
<!--输出到文件-->
<appender name="LOG_ROLLING"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${SYS_LOG_DIR}/${LOG_FILE}</file>
<filter class="ch.qos.logback.classic.filter.LevelFilter"> <!-- 日志过滤器只记录warn级别日志 ,若要配置其他级别复制appender修改level并在root中配置-->
<level>WARN</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${SYS_LOG_DIR}/%d{yyyy-MM-dd}/${LOG_FILE}_%d{yyyy-MM-dd}_%i.zip</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>50MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<layout>
<pattern>${fileLayoutPattern}</pattern>
</layout>
</appender>
<root level="INFO">
<appender-ref ref="CONSOLE" /> <!-- 控制台输出 -->
<appender-ref ref="LOG_ROLLING" /> <!-- 文件输出 -->
</root>
<!-- 测试环境+开发环境. 多个使用逗号隔开. -->
<springProfile name="test,dev">
<logger name="com.recovery.admin.boot.controller" level="INFO" />
</springProfile>
<!-- 生产环境. -->
<springProfile name="prod">
<logger name="com.recovery.admin.boot.controller" level="ERROR" />
</springProfile>
</configuration>

View File

@ -1,175 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- 从高到地低 OFF 、 FATAL 、 ERROR 、 WARN 、 INFO 、 DEBUG 、 TRACE 、 ALL -->
<!-- 日志输出规则 根据当前ROOT 级别日志输出时级别高于root默认的级别时 会输出 -->
<!-- 以下 每个配置的 filter 是过滤掉输出文件里面会出现高级别文件依然出现低级别的日志信息通过filter 过滤只记录本级别的日志-->
<!-- 属性描述 scan性设置为true时配置文件如果发生改变将会被重新加载默认值为true scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,
默认单位是毫秒。当scan为true时此属性生效。默认的时间间隔为1分钟。
debug:当此属性设置为true时将打印出logback内部日志信息实时查看logback运行状态。默认值为false。 -->
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!-- 定义日志文件 输入位置 -->
<springProperty scope="context" name="logPath" source="log.path" defaultValue="logs"/>
<property name="log_dir" value="${logPath}/common" />
<!-- 日志最大的历史 30天 -->
<property name="maxHistory" value="30"/>
<!-- ConsoleAppender 控制台输出日志 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<withJansi>true</withJansi>
<!-- 对日志进行格式化 -->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %highlight(%-5level) %cyan(%logger{15}) - %highlight(%msg) %n</pattern>
</encoder>
</appender>
<!-- ERROR级别日志 -->
<!-- 滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件 RollingFileAppender-->
<appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 过滤器只记录WARN级别的日志 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<!-- 最常用的滚动策略,它根据时间来制定滚动策略.既负责滚动也负责出发滚动 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志输出位置 可相对、和绝对路径 -->
<fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/error-log.log</fileNamePattern>
<!-- 可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件假设设置每个月滚动,且<maxHistory>是6
则只保存最近6个月的文件删除之前的旧文件。注意删除旧文件是那些为了归档而创建的目录也会被删除-->
<maxHistory>${maxHistory}</maxHistory>
</rollingPolicy>
<!-- 按照固定窗口模式生成日志文件当文件大于20MB时生成新的日志文件。窗口大小是1到3当保存了3个归档文件后将覆盖最早的日志。
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/.log.zip</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>3</maxIndex>
</rollingPolicy> -->
<!-- 查看当前活动文件的大小如果超过指定大小会告知RollingFileAppender 触发当前活动文件滚动
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>5MB</maxFileSize>
</triggeringPolicy> -->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
</encoder>
</appender>
<!-- WARN级别日志 appender -->
<appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 过滤器只记录WARN级别的日志 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>WARN</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 按天回滚 daily -->
<fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/warn-log.log
</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<maxHistory>${maxHistory}</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
</encoder>
</appender>
<!-- INFO级别日志 appender -->
<appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 过滤器只记录INFO级别的日志 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 按天回滚 daily -->
<fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/info-log.log
</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<maxHistory>${maxHistory}</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
</encoder>
</appender>
<!-- DEBUG级别日志 appender -->
<appender name="DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 过滤器只记录DEBUG级别的日志 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>DEBUG</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 按天回滚 daily -->
<fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/debug-log.log
</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<maxHistory>${maxHistory}</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
</encoder>
</appender>
<!-- TRACE级别日志 appender -->
<appender name="TRACE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 过滤器只记录ERROR级别的日志 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>TRACE</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 按天回滚 daily -->
<fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/trace-log.log
</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<maxHistory>${maxHistory}</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
</encoder>
</appender>
<logger name="java.sql.PreparedStatement" value="DEBUG" />
<logger name="java.sql.Connection" value="DEBUG" />
<logger name="java.sql.Statement" value="DEBUG" />
<logger name="com.recovery.admin.boot.aspect" value="DEBUG" />
<!-- root级别 DEBUG -->
<root level="INFO">
<!-- 控制台输出 -->
<appender-ref ref="STDOUT" />
<!-- 文件输出 -->
<appender-ref ref="ERROR" />
<appender-ref ref="INFO" />
<appender-ref ref="WARN" />
<appender-ref ref="DEBUG" />
<appender-ref ref="TRACE" />
</root>
</configuration>

View File

@ -1,53 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.recovery.admin.boot.mapper.MemberUserMapper">
<resultMap id="BaseResultMap" type="com.recovery.admin.boot.entity.MemberUser">
<id property="id" column="id" jdbcType="BIGINT"/>
<result property="username" column="username" jdbcType="VARCHAR"/>
<result property="nickname" column="nickname" jdbcType="VARCHAR"/>
<result property="gender" column="gender" jdbcType="BOOLEAN"/>
<result property="password" column="password" jdbcType="VARCHAR"/>
<result property="avatar" column="avatar" jdbcType="VARCHAR"/>
<result property="mobile" column="mobile" jdbcType="VARCHAR"/>
<result property="status" column="status" jdbcType="BOOLEAN"/>
<result property="email" column="email" jdbcType="VARCHAR"/>
<result property="deleted" column="deleted" jdbcType="BOOLEAN"/>
<collection property="roles" ofType="string" javaType="list">
<result column="roleCode"></result>
</collection>
</resultMap>
<sql id="Base_Column_List">
id
,username,nickname,
gender,password,dept_id,
avatar,mobile,status,
email,gmt_create,gmt_modified,
deleted
</sql>
<resultMap id="MemberUserAuthMap" type="com.recovery.common.base.dto.MemberUserAuthDTO">
<id property="userId" column="userId" jdbcType="BIGINT"/>
<result property="username" column="username" jdbcType="VARCHAR"/>
<result property="password" column="password" jdbcType="VARCHAR"/>
<result property="status" column="status" jdbcType="BOOLEAN"/>
<collection property="roles" ofType="string" javaType="list">
<result column="roleCode"></result>
</collection>
</resultMap>
<select id="getByUsername" resultMap="MemberUserAuthMap">
select t1.id userId, t1.username, t1.nickname, t1.password, t1.status, t3.code roleCode
from member_user t1,
sys_user_role t2,
sys_role t3
where t1.username = #{userName}
and t1.deleted = 0
and t1.id = t2.user_id
and t2.role_id = t3.id
</select>
</mapper>

View File

@ -1,35 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.recovery.admin.boot.mapper.SysPermissionMapper">
<resultMap id="BaseResultMap" type="com.recovery.admin.boot.entity.SysPermission">
<id property="id" column="id" jdbcType="BIGINT"/>
<result property="name" column="name" jdbcType="VARCHAR"/>
<result property="menuId" column="menu_id" jdbcType="BIGINT"/>
<result property="urlPerm" column="url_perm" jdbcType="VARCHAR"/>
<collection property="roles" ofType="String" javaType="list">
<result column="code"/>
</collection>
</resultMap>
<sql id="Base_Column_List">
id
,name,menu_id,
url_perm,btn_perm,gmt_create,
gmt_modified
</sql>
<select id="listPermRoles" resultMap="BaseResultMap">
SELECT t1.id,
t1.NAME,
t1.menu_id,
t1.url_perm,
t3.CODE
FROM sys_permission t1
LEFT JOIN sys_role_permission t2 ON t1.id = t2.permission_id
LEFT JOIN sys_role t3 ON t2.role_id = t3.id
</select>
</mapper>

View File

@ -1,12 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.recovery.admin.boot.mapper.UserMapper">
<select id="getByUsername" resultType="com.recovery.common.base.dto.UserAuthDTO">
select t1.user_name as userName,t1.password,t1.state as status,t1.id as userId
from tbl_user t1 where t1.user_name = #{userName}
</select>
</mapper>

View File

@ -69,7 +69,9 @@ public class AuthController {
userDetails = result.getData();
}
// 数据库中查询数据进行比对
if (userDetails.getUserName().equals(authenticationRequest.getUsername()) && userDetails.getPassword().equals(EncryptUtil.encrypt(authenticationRequest.getPassword()))) {
if (userDetails.getUserName().equals(authenticationRequest.getUsername())
&& userDetails.getPassword().equals(EncryptUtil.encrypt(authenticationRequest.getPassword())))
{
log.info("密码校验成功!");
StpUtil.login(userDetails.getUserId(),"PC");
}else {

View File

@ -16,8 +16,8 @@ import org.springframework.web.bind.annotation.RequestParam;
public interface UserFeignClient {
@GetMapping("/api/rest/users/getUserByUsername")
ApiResult<UserAuthDTO> getUserByUsername(@RequestParam String username);
ApiResult<UserAuthDTO> getUserByUsername(@RequestParam(value = "username") String username);
@GetMapping("/api/rest/users/member/username")
ApiResult<UserAuthDTO> getMemberUserByUsername(@RequestParam String username);
ApiResult<UserAuthDTO> getMemberUserByUsername(@RequestParam(value = "username") String username);
}