将所有delete 方法修改为post
This commit is contained in:
parent
2a8f87024b
commit
511fc3e312
|
|
@ -149,6 +149,10 @@ public class SysLogsVo {
|
|||
private String type;
|
||||
|
||||
private String capacity;
|
||||
/**
|
||||
* 0未处理,1已处理
|
||||
*/
|
||||
private String warningStatus;
|
||||
|
||||
/**
|
||||
* 越权记录
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ import java.util.List;
|
|||
@ConfigurationProperties(prefix = "system-config")
|
||||
@Data
|
||||
public class SystemConfig {
|
||||
|
||||
/**
|
||||
* 登录配置
|
||||
*/
|
||||
|
|
@ -44,6 +45,11 @@ public class SystemConfig {
|
|||
*/
|
||||
private PasswordConfig passwordConfig;
|
||||
|
||||
/**
|
||||
* websocketUrl
|
||||
*/
|
||||
private String webSocketurl;
|
||||
|
||||
@Data
|
||||
@RefreshScope
|
||||
public static class LoginConfig {
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
package com.bonus.system.service.impl;
|
||||
|
||||
import com.bonus.system.warning.SysWarning;
|
||||
import com.bonus.system.warning.WaringLogEvent;
|
||||
import com.google.common.collect.Maps;
|
||||
|
||||
import com.bonus.common.core.utils.DateUtils;
|
||||
|
|
@ -15,6 +17,8 @@ import com.bonus.system.api.domain.SysLogsVo;
|
|||
import com.bonus.system.api.model.LoginUser;
|
||||
import com.bonus.system.mapper.SysLogMapper;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.ApplicationEventPublisher;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.transaction.interceptor.TransactionAspectSupport;
|
||||
|
|
@ -24,7 +28,7 @@ import javax.servlet.http.HttpServletRequest;
|
|||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import com.bonus.common.log.enums.LogType;
|
||||
|
||||
/**
|
||||
* @author:cwchen
|
||||
* @date:2024-02-28-14:02
|
||||
|
|
@ -38,16 +42,13 @@ public class SysLogServiceImpl implements ISysLogService {
|
|||
@Resource(name = "SysLogMapper")
|
||||
private SysLogMapper mapper;
|
||||
|
||||
@Autowired
|
||||
private ApplicationEventPublisher eventPublisher;
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public AjaxResult saveLogs(SysLogsVo sysLog) {
|
||||
try {
|
||||
//weiweiw
|
||||
// if(sysLog.getResult() == SystemGlobal.SUCCESS_NUM){
|
||||
// sysLog.setFruit("成功");
|
||||
// }else {
|
||||
// sysLog.setFruit("失败");
|
||||
// }
|
||||
//如果是异常日志
|
||||
if(SystemGlobal.LOG_ERR.equals(sysLog.getErrType()) && StringUtils.isEmpty(sysLog.getModel())) {
|
||||
SysLogsVo sysLog1=mapper.getModule(sysLog.getOperUri());
|
||||
|
|
@ -61,6 +62,7 @@ public class SysLogServiceImpl implements ISysLogService {
|
|||
}
|
||||
}
|
||||
mapper.saveLogs(sysLog);
|
||||
eventPublisher.publishEvent(new WaringLogEvent(new SysWarning(sysLog.getLogId(),"测试系统日志告警","",sysLog.getIp(),sysLog.getGrade(),sysLog.getOperaUserName())));
|
||||
} catch (Exception e) {
|
||||
log.error("保存系统日志");
|
||||
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
||||
|
|
@ -72,8 +74,10 @@ public class SysLogServiceImpl implements ISysLogService {
|
|||
public void saveLogs(SysLogsVo sysLog, HttpServletRequest request) {
|
||||
try{
|
||||
// sysLog.setFruit("失败");
|
||||
sysLog.setLogId(IdUtils.fastUUID());
|
||||
sysLog.setIp(IpUtils.getIpAddr(request));
|
||||
String loginUuid = IdUtils.fastUUID();
|
||||
String ip = IpUtils.getIpAddr(request);
|
||||
sysLog.setLogId(loginUuid);
|
||||
sysLog.setIp(ip);
|
||||
sysLog.setGrade("高");
|
||||
sysLog.setErrType("越权访问");
|
||||
sysLog.setFailureReason("页面未授权");
|
||||
|
|
@ -95,6 +99,7 @@ public class SysLogServiceImpl implements ISysLogService {
|
|||
}
|
||||
mapper.saveLogs(sysLog);
|
||||
}
|
||||
eventPublisher.publishEvent(new WaringLogEvent(new SysWarning(loginUuid,"越权访问","",ip,"高",user.getUsername())));
|
||||
}catch (Exception e){
|
||||
log.error(e.toString(),e);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,7 +9,11 @@ import com.bonus.common.core.utils.StringUtils;
|
|||
import com.bonus.common.log.enums.OperaType;
|
||||
import com.bonus.system.api.domain.SysLogsVo;
|
||||
import com.bonus.system.domain.SysLogsMenuHead;
|
||||
import com.bonus.system.warning.SysWarning;
|
||||
import com.bonus.system.warning.WaringLogEvent;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.ApplicationEventPublisher;
|
||||
import org.springframework.stereotype.Service;
|
||||
import com.bonus.system.api.domain.SysOperLog;
|
||||
import com.bonus.system.mapper.SysOperLogMapper;
|
||||
|
|
@ -30,6 +34,9 @@ public class SysOperLogServiceImpl implements ISysOperLogService
|
|||
private SysOperLogMapper operLogMapper;
|
||||
public static final String MENU_TYPE_FILE = "F";
|
||||
|
||||
@Autowired
|
||||
private ApplicationEventPublisher eventPublisher;
|
||||
|
||||
/**
|
||||
* 新增操作日志
|
||||
*
|
||||
|
|
@ -94,6 +101,7 @@ public class SysOperLogServiceImpl implements ISysOperLogService
|
|||
*/
|
||||
@Override
|
||||
public int addLogs(SysLogsVo sysLogsVo) {
|
||||
eventPublisher.publishEvent(new WaringLogEvent(new SysWarning(sysLogsVo.getLogId(),"测试系统日志告警","",sysLogsVo.getIp(),sysLogsVo.getGrade(),sysLogsVo.getOperaUserName())));
|
||||
return operLogMapper.addLogs(sysLogsVo);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,33 @@
|
|||
package com.bonus.system.warning;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
@Data
|
||||
public class SysWarning {
|
||||
|
||||
public SysWarning(String warningId,String warningEvent, String warningContent,String warningIp,String warningGrade, String operaUserName ){
|
||||
this.warningId = warningId;
|
||||
this.warningEvent = warningEvent;
|
||||
this.warningContent = warningContent;
|
||||
this.warningIp = warningIp;
|
||||
this.warningGrade = warningGrade;
|
||||
this.operaUserName = operaUserName;
|
||||
}
|
||||
private String warningId;
|
||||
|
||||
private String warningEvent = "";
|
||||
|
||||
private String warningContent = "";
|
||||
|
||||
private String warningIp = "";
|
||||
|
||||
private String warningGrade = "";
|
||||
|
||||
private String operaUserName = "";
|
||||
|
||||
private Date warningTime;
|
||||
|
||||
private String warningStatus = "0";
|
||||
}
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
package com.bonus.system.warning;
|
||||
|
||||
import org.springframework.context.ApplicationEvent;
|
||||
|
||||
|
||||
public class WaringLogEvent extends ApplicationEvent {
|
||||
|
||||
private final SysWarning sysWarning;
|
||||
|
||||
public WaringLogEvent(SysWarning logEvent) {
|
||||
super(logEvent);
|
||||
this.sysWarning = logEvent;
|
||||
}
|
||||
|
||||
|
||||
public SysWarning getSysWarning(){
|
||||
return this.sysWarning;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
package com.bonus.system.warning;
|
||||
import com.bonus.system.service.ISysLogService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.event.EventListener;
|
||||
import org.springframework.messaging.handler.annotation.MessageMapping;
|
||||
import org.springframework.messaging.simp.SimpMessagingTemplate;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.web.socket.WebSocketSession;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.io.IOException;
|
||||
|
||||
@Component
|
||||
@Slf4j
|
||||
public class WarningListen {
|
||||
|
||||
@Autowired
|
||||
private SimpMessagingTemplate messagingTemplate;
|
||||
|
||||
@Resource(name = "ISysLogService")
|
||||
private ISysLogService service;
|
||||
|
||||
public static void closeSession(WebSocketSession session) throws IOException {
|
||||
session.close();
|
||||
}
|
||||
|
||||
@EventListener
|
||||
public void onLogSaved(WaringLogEvent event) {
|
||||
try {
|
||||
SysWarning warning = event.getSysWarning();
|
||||
sendAlert(warning);
|
||||
} catch (Exception e) {
|
||||
log.error("处理日志告警失败", e);
|
||||
}
|
||||
}
|
||||
|
||||
// 发送告警消息
|
||||
public void sendAlert(SysWarning alert) {
|
||||
messagingTemplate.convertAndSend("/topic/alerts", alert);
|
||||
log.info("*************************告警消息已发送:{}", alert);
|
||||
}
|
||||
|
||||
// 处理用户确认消息
|
||||
@MessageMapping("/alert-handled")
|
||||
public void handleAlert(String alertId) {
|
||||
// 在这里处理告警确认逻辑
|
||||
System.out.println("Alert " + alertId + " has been handled");
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
package com.bonus.system.warning;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
|
||||
import org.springframework.web.socket.CloseStatus;
|
||||
import org.springframework.web.socket.WebSocketSession;
|
||||
import org.springframework.web.socket.config.annotation.*;
|
||||
|
||||
@Configuration
|
||||
@EnableWebSocketMessageBroker
|
||||
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer, WebSocketConfigurer {
|
||||
|
||||
@Autowired
|
||||
private WebSocketHandler webSocketHandler;
|
||||
@Override
|
||||
public void configureMessageBroker(MessageBrokerRegistry config) {
|
||||
config.enableSimpleBroker("/topic");
|
||||
config.setApplicationDestinationPrefixes("/app");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerStompEndpoints(StompEndpointRegistry registry) {
|
||||
registry.addEndpoint("/ws-alert").withSockJS();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
|
||||
registry.addHandler(webSocketHandler, "/ws-alert")
|
||||
.setAllowedOrigins("*"); // 允许跨域
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
package com.bonus.system.warning;
|
||||
|
||||
import org.springframework.web.socket.*;
|
||||
import org.springframework.web.socket.handler.TextWebSocketHandler;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
|
||||
@Component
|
||||
public class WebSocketHandler extends TextWebSocketHandler {
|
||||
private static final Logger logger = LoggerFactory.getLogger(WebSocketHandler.class);
|
||||
private static final CopyOnWriteArrayList<WebSocketSession> sessions = new CopyOnWriteArrayList<>();
|
||||
|
||||
@Override
|
||||
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
|
||||
sessions.add(session);
|
||||
logger.info("WebSocket 连接成功: " + session.getId());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
|
||||
String payload = message.getPayload();
|
||||
logger.info("接收到消息: " + payload);
|
||||
|
||||
// 处理接收到的消息(例如广播给所有客户端)
|
||||
for (WebSocketSession wsSession : sessions) {
|
||||
if (wsSession.isOpen()) {
|
||||
wsSession.sendMessage(new TextMessage("服务端回应: " + payload));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
|
||||
sessions.remove(session);
|
||||
logger.info("WebSocket 连接关闭: " + session.getId());
|
||||
}
|
||||
}
|
||||
|
|
@ -5,21 +5,56 @@
|
|||
<!--保存系统日志-->
|
||||
<insert id="saveLogs" parameterType="SysLogsVo">
|
||||
insert into sys_logs(
|
||||
log_id,opera_user_name,ip,user_id,
|
||||
model,oper_time,method,params,
|
||||
operate_detail,oper_type,oper_uri,
|
||||
log_type,result,times,
|
||||
failure_reason,grade,err_type,
|
||||
method_type,title,result_data
|
||||
<if test=" logId!= null and logId != ''">log_id,</if>
|
||||
<if test=" operaUserName!= null">opera_user_name,</if>
|
||||
<if test=" ip!= null">ip,</if>
|
||||
<if test=" userId!= null and userId != 0">user_id,</if>
|
||||
<if test=" model!= null">model,</if>
|
||||
<if test=" operTime!= null">oper_time,</if>
|
||||
<if test=" method!= null">method,</if>
|
||||
<if test=" params!= null">params,</if>
|
||||
<if test=" operateDetail!= null">operate_detail,</if>
|
||||
<if test=" operaType!= null">oper_type,</if>
|
||||
<if test=" operUri!= null">oper_uri,</if>
|
||||
<if test=" logType!= null">log_type,</if>
|
||||
<if test=" result!= null">result,</if>
|
||||
<if test=" times!= null">times,</if>
|
||||
<if test=" failureReason!= null">failure_reason,</if>
|
||||
<if test=" grade!= null">grade,</if>
|
||||
<if test=" errType!= null">err_type,</if>
|
||||
<if test=" methodType!= null">method_type,</if>
|
||||
<if test=" title!= null">title,</if>
|
||||
<if test=" resultData!= null">result_data,</if>
|
||||
<if test=" warningStatus!= null">warning_status,</if>
|
||||
)values (
|
||||
#{logId},#{operaUserName},#{ip},#{userId},
|
||||
#{model},#{operTime},#{method},#{params},
|
||||
#{operateDetail},#{operaType},#{operUri},
|
||||
#{logType},#{result},#{times},
|
||||
#{failureReason},#{grade},#{errType},
|
||||
#{methodType},#{title},#{resultData}
|
||||
)
|
||||
<if test=" logId!= null and logId != ''">{logId},</if>
|
||||
<if test=" operaUserName!= null">{operaUserName},</if>
|
||||
<if test=" ip!= null">{ip},</if>
|
||||
<if test=" userId!= null and userId != 0">{userId},</if>
|
||||
<if test=" model!= null">{model},</if>
|
||||
<if test=" operTime!= null">{operTime},</if>
|
||||
<if test=" method!= null">{method},</if>
|
||||
<if test=" params!= null">{params},</if>
|
||||
<if test=" operateDetail!= null">{operateDetail},</if>
|
||||
<if test=" operaType!= null">{operaType},</if>
|
||||
<if test=" operUri!= null">{operUri},</if>
|
||||
<if test=" logType!= null">{logType},</if>
|
||||
<if test=" result!= null">{result},</if>
|
||||
<if test=" times!= null">{times},</if>
|
||||
<if test=" failureReason!= null">{failureReason},</if>
|
||||
<if test=" grade!= null">{grade},</if>
|
||||
<if test=" errType!= null">{errType},</if>
|
||||
<if test=" methodType!= null">{methodType},</if>
|
||||
<if test=" title!= null">{title},</if>
|
||||
<if test=" resultData!= null">{resultData},</if>
|
||||
<if test=" warningStatus!= null">{warningStatus},</if>
|
||||
</insert>
|
||||
|
||||
<update id="updateWarningStatus" parameterType="SysLogsVo">
|
||||
update sys_warning
|
||||
set warning_status = #{warningStatus}
|
||||
where log_id = #{logId}
|
||||
</update>
|
||||
<!-- <insert id="saveLogs">-->
|
||||
<!-- INSERT INTO sys_logs-->
|
||||
<!-- <trim prefix="(" suffix=")" suffixOverrides=",">-->
|
||||
|
|
|
|||
|
|
@ -0,0 +1,69 @@
|
|||
<?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.bonus.system.mapper.SysWarningMapper">
|
||||
|
||||
<resultMap id="SysWarningResult" type="com.bonus.system.warning.SysWarning">
|
||||
<id property="warningId" column="warning_id" />
|
||||
<result property="warningEvent" column="warning_event" />
|
||||
<result property="warningContent" column="warning_content" />
|
||||
<result property="warningIp" column="warning_ip" />
|
||||
<result property="warningGrade" column="warning_grade" />
|
||||
<result property="operaUserName" column="opera_user_name" />
|
||||
<result property="warningTime" column="warning_time" />
|
||||
<result property="warningStatus" column="warning_status" />
|
||||
</resultMap>
|
||||
|
||||
<!-- 使用 resultMap 的查询操作 -->
|
||||
<select id="selectWarningList" parameterType="com.bonus.system.warning.SysWarning" resultMap="SysWarningResult">
|
||||
SELECT
|
||||
warning_id,
|
||||
warning_event,
|
||||
warning_content,
|
||||
warning_ip,
|
||||
warning_grade,
|
||||
opera_user_name,
|
||||
warning_time,
|
||||
warning_status
|
||||
FROM sys_warning
|
||||
where
|
||||
<if test="warning_status != null and warning_status != 0">
|
||||
AND u.warning_status = #{warningStatus}
|
||||
</if>
|
||||
</select>
|
||||
|
||||
<select id="selectWarningById" parameterType="Long" resultMap="SysWarningResult">
|
||||
where u.warning_id = #{warningId}
|
||||
</select>
|
||||
|
||||
<insert id="insertWarning" parameterType="com.bonus.system.warning.SysWarning" useGeneratedKeys="true" keyProperty="warningId">
|
||||
insert into sys_warning(
|
||||
<if test=" warningId!= null and warningId != 0">warning_id,</if>
|
||||
<if test="warningEvent != null and warningEvent != ''">warning_event,</if>
|
||||
<if test="warningContent != null and warningContent != ''">warning_content,</if>
|
||||
<if test="warningIp != null and warningIp != ''">warning_ip,</if>
|
||||
<if test="warningGrade != null and warningGrade != ''">warning_grade,</if>
|
||||
<if test="operaUserName != null and operaUserName != ''">opera_user_name,</if>
|
||||
warning_time,
|
||||
<if test="warningStatus != null and warningStatus != ''">warning_status,</if>
|
||||
)values(
|
||||
<if test=" warningId!= null and warningId != ''">#{warningId},</if>
|
||||
<if test="warningEvent != null and warningEvent != ''">#{warningEvent},</if>
|
||||
<if test="warningContent != null and warningContent != ''">#{warningContent},</if>
|
||||
<if test="warningIp != null and warningIp != ''">#{warningIp},</if>
|
||||
<if test="warningGrade != null and warningGrade != ''">#{warningGrade},</if>
|
||||
<if test="operaUserName != null and operaUserName != ''">#{operaUserName},</if>
|
||||
sysdate,
|
||||
<if test="warningStatus != null and warningStatus != ''">#{warningStatus},</if>
|
||||
)
|
||||
</insert>
|
||||
|
||||
<update id="updateWarningStatus" parameterType="com.bonus.system.warning.SysWarning">
|
||||
update sys_warning
|
||||
set warning_status = #{warningStatus}
|
||||
where warning_id = #{warningId}
|
||||
</update>
|
||||
|
||||
|
||||
</mapper>
|
||||
Loading…
Reference in New Issue