新增文件下载监控,当有新ip下载文件时推送消息
This commit is contained in:
parent
fa0c2d43bd
commit
40b52013b7
12
pom.xml
12
pom.xml
@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-parent</artifactId>
|
||||
<version>3.1.5</version>
|
||||
<version>3.3.2</version>
|
||||
<relativePath/> <!-- lookup parent from repository -->
|
||||
</parent>
|
||||
<groupId>com.lion</groupId>
|
||||
@ -31,6 +31,12 @@
|
||||
<version>3.0.3</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.jsoup</groupId>
|
||||
<artifactId>jsoup</artifactId>
|
||||
<version>1.15.3</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-configuration-processor</artifactId>
|
||||
@ -72,7 +78,7 @@
|
||||
<dependency>
|
||||
<groupId>org.apache.commons</groupId>
|
||||
<artifactId>commons-compress</artifactId>
|
||||
<version>1.25.0</version>
|
||||
<version>1.26.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
@ -103,7 +109,7 @@
|
||||
<buildArgs>
|
||||
<arg>--gc=G1</arg>
|
||||
<arg>-H:+ReportExceptionStackTraces</arg>
|
||||
<arg>--initialize-at-build-time=org.apache.commons.logging.LogFactory,org.apache.commons.logging.LogFactoryService</arg>
|
||||
<arg>--initialize-at-build-time=org.apache.commons.logging.LogFactory,org.apache.commons.logging.LogFactoryService,org.sqlite.util.ProcessRunner</arg>
|
||||
</buildArgs>
|
||||
<metadataRepository>
|
||||
<enabled>true</enabled>
|
||||
|
||||
@ -38,6 +38,7 @@ import org.springframework.beans.factory.aot.BeanRegistrationExcludeFilter;
|
||||
import org.springframework.beans.factory.config.BeanDefinition;
|
||||
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
|
||||
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
|
||||
import org.springframework.beans.factory.config.ConstructorArgumentValues;
|
||||
import org.springframework.beans.factory.support.MergedBeanDefinitionPostProcessor;
|
||||
import org.springframework.beans.factory.support.RegisteredBean;
|
||||
import org.springframework.beans.factory.support.RootBeanDefinition;
|
||||
@ -201,8 +202,7 @@ public class MyBatisNativeConfiguration {
|
||||
} else {
|
||||
result = (Class<?>) src;
|
||||
}
|
||||
} else if (src instanceof ParameterizedType) {
|
||||
ParameterizedType parameterizedType = (ParameterizedType) src;
|
||||
} else if (src instanceof ParameterizedType parameterizedType) {
|
||||
int index = (parameterizedType.getRawType() instanceof Class
|
||||
&& Map.class.isAssignableFrom((Class<?>) parameterizedType.getRawType())
|
||||
&& parameterizedType.getActualTypeArguments().length > 1) ? 1 : 0;
|
||||
@ -246,8 +246,10 @@ public class MyBatisNativeConfiguration {
|
||||
Class<?> mapperInterface = getMapperInterface(beanDefinition);
|
||||
if (mapperInterface != null) {
|
||||
// Exposes a generic type information to context for prevent early initializing
|
||||
beanDefinition
|
||||
.setTargetType(ResolvableType.forClassWithGenerics(beanDefinition.getBeanClass(), mapperInterface));
|
||||
ConstructorArgumentValues constructorArgumentValues = new ConstructorArgumentValues();
|
||||
constructorArgumentValues.addGenericArgumentValue(mapperInterface);
|
||||
beanDefinition.setConstructorArgumentValues(constructorArgumentValues);
|
||||
beanDefinition.setTargetType(ResolvableType.forClassWithGenerics(beanDefinition.getBeanClass(), mapperInterface));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -40,6 +40,9 @@ public interface ShareFileMapper {
|
||||
@Select("select * from share_file where sharer=#{userid}")
|
||||
ShareFile[] selectAllShareFileByUserid(int userid);
|
||||
|
||||
@Select("select count(*) from share_file_download_record where share_code=#{shareCode} and ip=#{ip}")
|
||||
int isDownloadBefore(@Param("shareCode") String shareCode, @Param("ip") String ip);
|
||||
|
||||
@Update("update share_file set expire_time=#{expireTime}, available_count=#{availableCount}, total_count=#{totalCount} " +
|
||||
"where share_code = #{shareCode}")
|
||||
void updateShareFile(ShareFile shareFile);
|
||||
|
||||
@ -1028,7 +1028,7 @@ public class FileService {
|
||||
try(TarArchiveInputStream tarInput = new TarArchiveInputStream(new BufferedInputStream(new FileInputStream(storagePath + task.getRelativePath() + task.getSourcePath()))))
|
||||
{
|
||||
TarArchiveEntry entry;
|
||||
while ((entry = tarInput.getNextTarEntry()) != null) {
|
||||
while ((entry = tarInput.getNextEntry()) != null) {
|
||||
if (entry.isDirectory()) {
|
||||
// 如果是目录,创建相应的目录结构
|
||||
File dir = new File(storagePath + task.getRelativePath() + task.getTargetPath(), entry.getName());
|
||||
@ -1135,13 +1135,20 @@ public class FileService {
|
||||
}
|
||||
|
||||
//判断文件是否存在
|
||||
if(!new File(shareFile.getFilePath()).isFile()){
|
||||
File file = new File(shareFile.getFilePath());
|
||||
if(!file.isFile()){
|
||||
try {
|
||||
httpResponse.sendError(404, "File is not exist");
|
||||
return;
|
||||
} catch (IOException e) {throw new RuntimeException(e);}
|
||||
}
|
||||
|
||||
//如果该文件被新ip下载,通知进行tg推送
|
||||
if(shareFileMapper.isDownloadBefore(shareCode, ip) == 0){
|
||||
String message = "文件:" + file.getName() + "\n被新ip:" + ip + "下载\n归属地:" + CustomUtil.getLocationByIp(ip);
|
||||
CustomUtil.notifyMe(message);
|
||||
}
|
||||
|
||||
//ipAndShareCode为下载ip+shareCode,如果包含的话,则说明这个ip不是第一次下载这个文件了
|
||||
if(ipAndShareCode.containsKey(ip+shareCode)) {
|
||||
long before = ipAndShareCode.get(ip+shareCode);
|
||||
|
||||
@ -9,11 +9,19 @@ import com.lion.sns.message.PairMessage;
|
||||
import com.lion.sns.pojo.Site;
|
||||
import com.lion.sns.pojo.User;
|
||||
import lombok.Data;
|
||||
import org.jsoup.Jsoup;
|
||||
import org.jsoup.select.Elements;
|
||||
import org.springframework.util.DigestUtils;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.net.ServerSocket;
|
||||
import java.net.URI;
|
||||
import java.net.URLEncoder;
|
||||
import java.net.http.HttpClient;
|
||||
import java.net.http.HttpRequest;
|
||||
import java.net.http.HttpResponse;
|
||||
import java.nio.charset.Charset;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.FileVisitResult;
|
||||
import java.nio.file.Files;
|
||||
@ -222,4 +230,33 @@ public class CustomUtil {
|
||||
|
||||
return size.get();
|
||||
}
|
||||
|
||||
public static void notifyMe(String message){
|
||||
try (HttpClient httpClient = HttpClient.newHttpClient()) {
|
||||
HttpRequest httpRequest = HttpRequest.newBuilder(URI.create("https://personal.lionwebsite.xyz/message2me?AuthCode=alone&message=" + URLEncoder.encode(message, Charset.defaultCharset()))).POST(HttpRequest.BodyPublishers.noBody()).build();
|
||||
httpClient.send(httpRequest, HttpResponse.BodyHandlers.ofString());
|
||||
} catch (IOException | InterruptedException e) {
|
||||
System.out.println("发送消息:" + message + " 失败");
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
public static String getLocationByIp(String ip){
|
||||
String location;
|
||||
try (HttpClient httpClient = HttpClient.newHttpClient()){
|
||||
HttpRequest httpRequest = HttpRequest.newBuilder(URI.create("https://www.ip138.com/iplookup.php?ip=" + ip))
|
||||
.headers("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0",
|
||||
"Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8").GET().build();
|
||||
String page = httpClient.send(httpRequest, HttpResponse.BodyHandlers.ofString()).body();
|
||||
Elements tds = Jsoup.parse(page).select("body > div > div.container > div.content > div > div:nth-child(2) > div.group-left > div > div.bd > div.table-outer > div.table-box > table > tbody > tr > td");
|
||||
if(tds.size() > 3)
|
||||
location = tds.get(1).text().replace("中国", "") + " " + tds.get(3).text().trim();
|
||||
else
|
||||
location = tds.get(1).text();
|
||||
}catch (Exception e){
|
||||
System.out.println("获取ip地址信息失败: " + e.getMessage());
|
||||
location = "unknown";
|
||||
}
|
||||
return location;
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user