package com.mm.controller;
|
|
import cn.hutool.crypto.SmUtil;
|
import com.mm.service.IReceiveFileService;
|
import com.mm.util.*;
|
import com.mm.vo.*;
|
import org.apache.commons.lang3.StringUtils;
|
import org.apache.tomcat.util.http.fileupload.IOUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.context.annotation.PropertySource;
|
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.method.HandlerMethod;
|
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartHttpServletRequest;
|
|
import javax.crypto.CipherOutputStream;
|
import javax.servlet.ServletInputStream;
|
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletResponse;
|
import java.io.*;
|
import java.net.InetAddress;
|
import java.net.URLDecoder;
|
import java.net.UnknownHostException;
|
import java.util.List;
|
import java.util.Properties;
|
|
|
@RestController
|
@RequestMapping("/outer")
|
@PropertySource("classpath:/scheduled.properties")
|
public class ServiceNcController {
|
@Autowired
|
private IReceiveFileService receiveFileService;
|
|
@Value("${giveServiceTo.appIdCheck}")
|
private String appIdCheck;
|
|
@Value("${giveServiceTo.passwordCheck}")
|
private String passwordCheck;
|
@Value("${giveServiceTo.logIp}")
|
private String logIp;
|
@Value("${giveServiceTo.logPort}")
|
private String logPort;
|
|
@Value("${giveServiceTo.clientIp}")
|
private String clientIp;
|
@Value("${fileNumPath}")
|
private String fileNumPath;
|
|
@GetMapping("/test")
|
public void analysisAndCopyFile(){
|
receiveFileService.analysisAndCopyFile();
|
}
|
|
//PostParams属性:string appId,string password
|
@PostMapping(value = "/appAuth")
|
public TokenResp getToken(@RequestBody PostParams postParams){
|
|
//获取请求头中传入的appId和password
|
String appId = postParams.getAppId();
|
String password = postParams.getPassword();
|
|
//用于校验的正确的appId和password(根据业务调整)
|
/*String appIdCheck = "admin";
|
String passwordCheck = "123";*/
|
|
//校验appId和paaword,由于测试用的明文密码,SM3Util.verify()先将铭文密码SM3加密后再与传入password对比
|
if(appIdCheck.equals(appId)&& SM3Util.verify(passwordCheck,password)){
|
//校验通过,生成token签名
|
String token = JwTUtil.sign(appId, passwordCheck);
|
return new TokenResp("200","认证成功",token);
|
}else{
|
//to-do认证失败
|
return null;
|
}
|
}
|
|
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler){
|
//如果不是映射到方法直接通过
|
if (!(handler instanceof HandlerMethod)) {
|
return true;
|
}
|
//从 http 请求头中取出 token
|
String token = request.getHeader("Token");
|
if (token == null) {
|
throw new RuntimeException("无 token ,请重新登陆");
|
}
|
/*//验证 token,JwtUtil为生成token和验证token的工具类
|
JwTUtil.checkSign(token);
|
|
//获取 token 中的 appId
|
String appId = JwTUtil.getUserId(token);
|
//获取 token 中的其他数据
|
Map<String, Object> info = JwTUtil.getInfo(token);
|
info.forEach((k, v) -> System.out.println(k + ":" + v));*/
|
return true;
|
}
|
|
@PostMapping(value = "/fileUpload")
|
public RespData uploadFiles(HttpServletRequest request) {
|
SysLogTypeObjectDto objectName = new SysLogTypeObjectDto();
|
objectName.setDateTime(DateUtil.format(DateUtil.getNow(),DateUtil.STR_DATE_TIME_SMALL));
|
|
FileDetail fileDetail = new FileDetail();
|
try {
|
request.setCharacterEncoding("UTF-8");
|
} catch (UnsupportedEncodingException e) {
|
e.printStackTrace();
|
}
|
//获取FileName
|
if(request.getHeader("FileName")!=null){
|
try {
|
fileDetail.setFileName(URLDecoder.decode(request.getHeader("FileName"),"utf-8"));
|
} catch (UnsupportedEncodingException e) {
|
e.printStackTrace();
|
}
|
}
|
//获取Content-Length
|
if(request.getHeader("Content-Length")!=null){
|
try {
|
fileDetail.setContentLength(URLDecoder.decode(request.getHeader("Content-Length"),"utf-8"));
|
} catch (UnsupportedEncodingException e) {
|
e.printStackTrace();
|
}
|
}
|
//获取文件流
|
ServletInputStream inputStream = null;
|
try {
|
inputStream = request.getInputStream();
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
//操作文件流,上传文件
|
//fileService.uploadFile(inputStream,fileDetail.getFileName());
|
//DataInputStream in = new DataInputStream(inputStream);
|
FileOutputStream fileOut = null;
|
try {
|
fileOut = new FileOutputStream(fileDetail.getFileName());//这里可以改路径
|
IOUtils.copy(inputStream, fileOut);
|
fileOut.flush();
|
fileOut.flush();
|
objectName.setResult("成功");
|
|
File file = new File(fileDetail.getFileName());
|
objectName.setFileName(file.getName());
|
objectName.setFileSize(String.valueOf(file.length()));
|
objectName.setDateTime(DateUtil.format(DateUtil.getNow(),DateUtil.STR_DATE_TIME_SMALL));
|
objectName.setFileSize(FileUtil.changeFileFormatKb(String.valueOf(file.length())));
|
objectName.setDestination("10.118.10.63");//服务端IP
|
objectName.setSourceAddress("10.118.15.11");//客户端
|
String sm3 = SmUtil.sm3(file);
|
objectName.setAbstract1(sm3);
|
|
//不记录数据量
|
|
String fileNum = FileNumUtil.readFileSum(fileNumPath);
|
if (StringUtils.isBlank(fileNum)) {
|
objectName.setFileNum(Integer.toString(1));
|
FileNumUtil.fileWriterSql(Integer.toString(1),fileNumPath);
|
} else {
|
Integer num = Integer.valueOf(fileNum) + 1;
|
objectName.setFileNum(Integer.toString(num));
|
FileNumUtil.fileWriterSql(Integer.toString(num),fileNumPath);
|
}
|
InetAddress address = null;
|
try {
|
address = InetAddress.getLocalHost();
|
String ip = address.getHostAddress();
|
objectName.setAddress(ip);
|
} catch (UnknownHostException e) {
|
objectName.setAddress("10.118.10.63");
|
}
|
try {
|
objectName.setTypes("Info");
|
SyslogClient.sendClient(logIp,Integer.valueOf(logPort),objectName.toString());
|
}catch (Exception e) {
|
|
}
|
|
} catch (IOException e) {
|
objectName.setResult("失败");
|
objectName.setTypes("error");
|
SyslogClient.sendClient(logIp,Integer.valueOf(logPort),objectName.toString());
|
e.printStackTrace();
|
}finally {
|
try {
|
if (inputStream != null) {
|
inputStream.close();
|
}
|
if (fileOut != null) {
|
fileOut.close();
|
}
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
}
|
return new RespData("200", "文件接收成功");
|
}
|
}
|