feat: ASW-38 webshark 访问接口开发

This commit is contained in:
zhangshuai
2024-08-15 15:09:43 +08:00
parent ecb57f6c6c
commit 634166c4b3
3 changed files with 67 additions and 3 deletions

View File

@@ -6,6 +6,7 @@ import feign.Feign;
import feign.form.FormEncoder;
import net.geedge.asw.module.feign.client.GeoipClient;
import net.geedge.asw.module.feign.client.KibanaClient;
import net.geedge.asw.module.feign.client.WebSharkClient;
import net.geedge.asw.module.feign.client.ZeekClient;
import net.geedge.asw.module.feign.support.Fastjson2Decoder;
import net.geedge.asw.module.feign.support.Fastjson2Encoder;
@@ -28,6 +29,9 @@ public class FeignClientConfiguration {
@Value("${kibana.url:127.0.0.1:5601}")
private String kibanaUrl;
@Value("${webShark.url:127.0.0.1:8085}")
private String websharkurl;
@Bean("zeekClient")
public ZeekClient zeekClient() {
String url = UrlBuilder.ofHttp(zeekUrl).toString();
@@ -61,4 +65,15 @@ public class FeignClientConfiguration {
.target(KibanaClient.class, url);
}
@Bean("webSharkClient")
public WebSharkClient webSharkClient() {
String url = UrlBuilder.ofHttp(websharkurl).toString();
log.info("[webSharkClient] [url: {}]", url);
return Feign.builder()
.encoder(new FormEncoder())
//.decoder(new Fastjson2Decoder())
.client(new Http2Client())
.target(WebSharkClient.class, url);
}
}

View File

@@ -0,0 +1,17 @@
package net.geedge.asw.module.feign.client;
import feign.Headers;
import feign.Param;
import feign.RequestLine;
import org.springframework.cloud.openfeign.FeignClient;
import java.io.File;
import java.util.Map;
@FeignClient(name = "webSharkClient")
public interface WebSharkClient {
@RequestLine("POST /webshark/upload")
@Headers("Content-Type: multipart/form-data")
void upload(@Param("fileKey") File file);
}

View File

@@ -2,14 +2,19 @@ package net.geedge.asw.module.runner.controller;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.net.url.UrlBuilder;
import cn.hutool.log.Log;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import jakarta.servlet.http.HttpServletResponse;
import net.geedge.asw.common.config.SpringContextUtils;
import net.geedge.asw.common.util.*;
import net.geedge.asw.module.feign.client.WebSharkClient;
import net.geedge.asw.module.runner.entity.PcapEntity;
import net.geedge.asw.module.runner.service.IPcapService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.MediaType;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
@@ -17,9 +22,7 @@ import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.*;
@RestController
@RequestMapping("/api/v1/pcap")
@@ -30,6 +33,9 @@ public class PcapController {
@Autowired
private IPcapService pcapService;
@Value("${webShark.url:127.0.0.1:5601}")
private String websharkurl;
@GetMapping("/{id}")
public R detail(@PathVariable("id") String id) {
PcapEntity pcapEntity = pcapService.queryInfo(id);
@@ -125,4 +131,30 @@ public class PcapController {
T.FileUtil.del(zipFile);
}
}
@GetMapping("/{id}/webshark")
public R webshark(@PathVariable String id) {
T.VerifyUtil.is(id).notEmpty();
HashMap<Object, Object> result = T.MapUtil.newHashMap();
PcapEntity pcap = pcapService.getById(id);
File pcapFile = T.FileUtil.file(pcap.getPath());
String uploadFileName = T.StrUtil.concat(true, id, ".", T.FileUtil.getSuffix(pcapFile));
File newFile = FileUtil.copy(pcapFile, FileUtil.file(Constants.TEMP_PATH, uploadFileName), false);
try {
WebSharkClient webSharkClient = (WebSharkClient) SpringContextUtils.getBean("webSharkClient");
webSharkClient.upload(newFile);
String baseUrl = UrlBuilder.ofHttp(websharkurl)
.addPath("/webshark")
.toString();
result.put("name", uploadFileName);
result.put("url", baseUrl);
}catch (Exception e){
log.error(e, "webshark upload pcap error, id: {}", pcap.getId());
}finally {
FileUtil.del(newFile);
}
return R.ok(result);
}
}