提交 25c9de06 authored 作者: 杨凯's avatar 杨凯

feat:新增告警接收接口

上级 2ae78223
...@@ -142,6 +142,17 @@ ...@@ -142,6 +142,17 @@
<version>1.9.40</version> <version>1.9.40</version>
</dependency> </dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.8.9</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.9</version>
</dependency>
<!-- <dependency>--> <!-- <dependency>-->
<!-- <groupId>org.springframework.cloud</groupId>--> <!-- <groupId>org.springframework.cloud</groupId>-->
<!-- <artifactId>spring-cloud-starter-config</artifactId>--> <!-- <artifactId>spring-cloud-starter-config</artifactId>-->
......
package com.ebaiyihui.alarm.server.aspect;
import com.alibaba.fastjson.JSON;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.Signature;
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.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
/**
* @program chenmt-rides
* @description:
* @author: chenmet
* @create: 2019/08/09 10:58
*/
@Slf4j
@Aspect //表明是一个切面类
@Component //将当前类注入到Spring容器内
public class LogAspect {
//xyz.chenmt.www.chenmtrides.controller包下的所有类中的所有方法,".."表示所有方法中的参数不限个数;
//切入点,其中execution用于使用切面的连接点。使用方法:execution(方法修饰符(可选)
// 返回类型 方法名 参数 异常模式(可选)) ,可以使用通配符匹配字符,*可以匹配任意字符。
@Pointcut("execution(public * com.ebaiyihui.alarm.server.controller.*.*(..))")
public void LogAspect(){}
//环绕通知,就是可以在执行前后都使用,这个方法参数必须为ProceedingJoinPoint,proceed()方法就是被切面的方法,
// 上面四个方法可以使用JoinPoint,JoinPoint包含了类名,被切面的方法名,参数等信息。
@Around("LogAspect()")
public Object deAround(ProceedingJoinPoint pjp) throws Throwable{
RequestAttributes ra = RequestContextHolder.getRequestAttributes();
ServletRequestAttributes sra = (ServletRequestAttributes) ra;
HttpServletRequest request = sra.getRequest();
//ip地址
String ipaddress;
if (request.getHeader("x-forwarded-for") == null) {
ipaddress = request.getRemoteAddr();
} else {
ipaddress = request.getHeader("x-forwarded-for");
}
String url = request.getRequestURL().toString();
String method = request.getMethod();
String queryString = request.getQueryString();
Object[] args = pjp.getArgs();
String params = "";
//获取请求参数集合并进行遍历拼接
if(args.length>0){
if("POST".equals(method)){
Object object = args[0];
Map map = getKeyAndValue(object);
params = JSON.toJSONString(map);
;
}else if("GET".equals(method)){
params = queryString;
}
}
Signature signature = pjp.getSignature();
MethodSignature methodSignature = (MethodSignature)signature;
Method targetMethod = methodSignature.getMethod();
Method realMethod = pjp.getTarget().getClass().getDeclaredMethod(signature.getName(), targetMethod.getParameterTypes());
ApiOperation operation=realMethod.getAnnotation(ApiOperation.class);
if(null!=operation){
log.info("请求开始===方法描述:{},请求方法:{},请求地址:{},请求ip:{},请求类型:{},请求参数:{}",operation.value(),realMethod.getName(),url,ipaddress,method,params);
}else{
log.info("请求开始===请求方法:{},请求地址:{},请求ip:{},请求类型:{},请求参数:{}",realMethod.getName(),url,ipaddress,method,params);
}
// result的值就是被拦截方法的返回值
// Object result = pjp.proceed();
// log.info("请求结束===返回值{}",JSONObject.toJSON(result));
return pjp.proceed();
}
public static Map<String, Object> getKeyAndValue(Object obj) {
Map<String, Object> map = new HashMap<String, Object>();
// 得到类对象
Class userCla = (Class) obj.getClass();
/* 得到类中的所有属性集合 */
Field[] fs = userCla.getDeclaredFields();
for (int i = 0; i < fs.length; i++) {
Field f = fs[i];
f.setAccessible(true); // 设置些属性是可以访问的
Object val;
try {
val = f.get(obj);
// 得到此属性的值
map.put(f.getName(), val);// 设置键值
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
return map;
}
}
...@@ -24,10 +24,10 @@ import java.util.stream.Collectors; ...@@ -24,10 +24,10 @@ import java.util.stream.Collectors;
@Service @Service
public class AlarmServiceImpl implements AlarmService { public class AlarmServiceImpl implements AlarmService {
@Value("${webHookUrl:https://open.feishu.cn/open-apis/bot/v2/hook/23a4631d-393e-46e8-9235-f321323b37d0}") @Value("${webHookUrl}")
private String webHookUrl; private String webHookUrl;
@Value("${secret:OV5mmyDxX5Nx0caMYQp3Kg}") @Value("${secret}")
private String secret; private String secret;
@Override @Override
......
...@@ -55,9 +55,15 @@ ...@@ -55,9 +55,15 @@
# log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
# map-underscore-to-camel-case: true # map-underscore-to-camel-case: true
logging: server:
config: classpath:logback-spring.xml port: 9010
path: data/log spring:
application:
name: byh-alarm-service
#logging:
# config: classpath:logback-spring.xml
# path: data/log
#swagger: #swagger:
# enabled: true # enabled: true
......
server:
port: 9010
spring:
application:
name: byh-alarm-service
profiles:
active: pro
# cloud:
# config:
# name: byh-charitable-assistance
# profile: pro # 配置文件版本
# label: zryh # 配置文件分支
# discovery:
# enabled: true #是从配置中心读取文件
# service-id: byh-service-config
eureka:
client:
serviceUrl:
defaultZone: http://discover:1111/eureka/
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论