From df228e999b0ac567ac551e6a3339b5ecb548476f Mon Sep 17 00:00:00 2001
From: zengh <123456>
Date: Fri, 19 Nov 2021 09:13:34 +0800
Subject: [PATCH] 穿透修改

---
 src/main/java/org/springblade/modules/FTP/FtpUploadFile.java                       |  134 ++++++++++++++++++++++++++
 src/main/java/org/springblade/modules/article/entity/Article.java                  |   11 ++
 src/main/resources/application-dev.yml                                             |   10 +-
 src/main/java/org/springblade/modules/article/mapper/ArticleMapper.xml             |   32 ++++++
 src/main/java/org/springblade/modules/article/controller/ArticleController.java    |   30 +++++
 src/main/java/org/springblade/modules/words/DemoApplication.java                   |   38 +++++--
 src/main/java/org/springblade/modules/article/mapper/ArticleMapper.java            |    2 
 src/main/java/org/springblade/modules/article/service/ArticleService.java          |    2 
 src/main/java/org/springblade/modules/article/service/impl/ArticleServiceImpl.java |   11 ++
 9 files changed, 252 insertions(+), 18 deletions(-)

diff --git a/src/main/java/org/springblade/modules/FTP/FtpUploadFile.java b/src/main/java/org/springblade/modules/FTP/FtpUploadFile.java
new file mode 100644
index 0000000..c35f666
--- /dev/null
+++ b/src/main/java/org/springblade/modules/FTP/FtpUploadFile.java
@@ -0,0 +1,134 @@
+package org.springblade.modules.FTP;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.commons.net.ftp.FTP;
+import org.apache.commons.net.ftp.FTPClient;
+import org.apache.commons.net.ftp.FTPReply;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.SocketException;
+
+public class FtpUploadFile {
+	private final static Log logger = LogFactory.getLog(FtpUploadFile.class);
+	/**
+	 * 获取ftpClient对象
+	 * @param ftpHost FTP服务器地址
+	 * @param ftpUserName 登录FTP服务器用户名
+	 * @param ftpPassword 登录FTP服务器密码
+	 * @param ftpPort FTP服务器端口
+	 * @return
+	 */
+	public static FTPClient getFTPClient(String ftpHost, String ftpUserName, String ftpPassword, int ftpPort) {
+		FTPClient ftpClient = new FTPClient();
+		//ftpClient.setControlEncoding("GBK"); // 传输的字符编码(防止乱码),自带的编码是ISO-8859-1,一般不会出现乱码
+		//超时时间(防止僵死)
+		//ftpClient.setDataTimeout(1000*60);
+		//ftpClient.setDefaultTimeout(1000*60);
+		//工作流的大小
+		//ftpClient.setBufferSize(1024*4);
+		//主被动模式(应对FTP服务器的相关安全设置)
+		ftpClient.enterLocalPassiveMode();
+		//ftpClient.enterLocalActiveMode();
+		try {
+			ftpClient.connect(ftpHost, ftpPort);  // 连接FTP服务器
+			if(ftpClient.isConnected()) {
+				//使用用户名和密码登录
+				if(ftpClient.login(ftpUserName, ftpPassword)) {
+					//判断FTP连接是否可用,源码中是通过判断ReplyCode值(200=< reply <300)
+					if(FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {
+						logger.info("FTP连接成功。");
+						System.out.println("FTP登录成功,ftpHost: ftp:/"+ftpClient.getRemoteAddress());
+						ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
+					}
+				}else {
+					logger.info("未连接到FTP,用户名或密码错误。");
+					ftpClient.disconnect();
+				}
+			}
+		} catch (SocketException e) {
+			e.printStackTrace();
+			logger.info("FTP的IP地址可能错误,请正确配置。");
+		} catch (IOException e) {
+			e.printStackTrace();
+			logger.info("FTP的端口错误,请正确配置。");
+		}
+		return ftpClient;
+	}
+
+	/**
+	 * 上传文件
+	 * @param ftpHost FTP服务器地址
+	 * @param ftpUserName 登录FTP服务器用户名
+	 * @param ftpPassword 登录FTP服务器密码
+	 * @param ftpPort FTP服务器端口
+	 * @param ftpPath 上传到FTP服务器的指定目录
+	 * @param filename 上传的文件名
+	 * @param input 文件输入流
+	 * @return 成功返回true,否则返回false
+	 */
+	public static boolean uploadFile(String ftpHost, String ftpUserName, String ftpPassword, int ftpPort, String ftpPath, String filename, InputStream input) {
+		boolean result = false;
+		FTPClient ftpClient = getFTPClient(ftpHost, ftpUserName, ftpPassword, ftpPort);
+		try {
+			int reply;
+			reply = ftpClient.getReplyCode(); //用户名密码错误时,值是530
+
+			if (!FTPReply.isPositiveCompletion(reply)) { //判断是否成功登录
+				//ftpClient.disconnect(); //用户名密码错误时报空指针,是因为在用户名密码不正确时,在上面已执行disconnect操作
+				return result;
+			}
+
+			ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
+			ftpClient.makeDirectory(ftpPath); //目录不存在则创建目录
+			ftpClient.changeWorkingDirectory(ftpPath); //切换到要上传的目录
+			//编码文件名,支持中文文件名
+			filename = new String(filename.getBytes("GBK"), FTP.DEFAULT_CONTROL_ENCODING);
+			//上传文件
+			if (!ftpClient.storeFile(filename, input)) {
+				System.out.println("文件已存在"); //应该是判断文件是否已存在服务器上
+				return result;
+			}
+			input.close();
+			ftpClient.logout();
+			result = true;
+		} catch (IOException e) {
+			e.printStackTrace();
+		} catch (NullPointerException e){
+			e.printStackTrace();
+		} finally {
+			if (ftpClient.isConnected()) {
+				try {
+					ftpClient.disconnect();
+				} catch (IOException e) {}
+			}
+		}
+		return result;
+	}
+
+	public static void main(String[] args) {
+		String ftpHost = "192.168.0.105";
+		String ftpUserName = "yly";
+		String ftpPassword = "Yly@123";
+		int ftpPort = 21;
+		//String ftpPath = "";  //目录名, ""表示根目录
+		String ftpPath = "";  //目录名最好是英文,中文目录暂时还未成功上传
+		String fileName = "fz.py"; //要上传的文件名
+
+		//上传文件
+		try{
+			FileInputStream in=new FileInputStream(new File("D:\\" + fileName)); //要上传的文件所在的目录,这里放的是D盘的根目录下
+			Boolean result = FtpUploadFile.uploadFile(ftpHost, ftpUserName,  ftpPassword, ftpPort, ftpPath, fileName, in);
+			if(result){
+				System.out.println(fileName+"文件上传成功");
+			}else{
+				System.out.println(fileName+"文件上传失败");
+			}
+		} catch (Exception e){
+			e.printStackTrace();
+		}
+	}
+}
diff --git a/src/main/java/org/springblade/modules/article/controller/ArticleController.java b/src/main/java/org/springblade/modules/article/controller/ArticleController.java
index b0b1d7d..d944561 100644
--- a/src/main/java/org/springblade/modules/article/controller/ArticleController.java
+++ b/src/main/java/org/springblade/modules/article/controller/ArticleController.java
@@ -18,6 +18,8 @@
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
 
 /**
  * @author zhongrj
@@ -45,6 +47,22 @@
 		response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
 		response.setHeader("Access-Control-Allow-Credentials","true");
 		return R.data(articleService.selectArticlePage(Condition.getPage(query),article));
+	}
+
+	/**
+	 *
+	 * 敏感词预警
+	 * @param response
+	 * @param article 资讯对象
+	 * @param query 查询参数
+	 * @return
+	 */
+	@GetMapping("/pageWords")
+	public R<IPage<Article>> pageWords(HttpServletResponse response, ArticleVo article, Query query){
+		response.setHeader("Access-Control-Allow-Origin", "*");
+		response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
+		response.setHeader("Access-Control-Allow-Credentials","true");
+		return R.data(articleService.pageWords(Condition.getPage(query),article));
 	}
 
 	/**
@@ -150,11 +168,19 @@
 				article.setCreateTime(new Date());
 			}
 		}
+		//默认为正常
+		article.setIswords("0");
 
 		if (article.getContent() != null && article.getContent() != ""){
-			String content = "";
+			Map<String,String> content = new HashMap();
 			content = DemoApplication.interceptWords(article.getContent());
-			article.setContent(content);
+
+			if (content.get("iswords").equals(true)){
+				article.setContent(content.get("content"));
+				article.setIswords("1");
+				article.setWordsContent(content.get("words"));
+			}
+
 		}
 		article.setUpdateTime(new Date());
 		return R.status(articleService.saveOrUpdate(article));
diff --git a/src/main/java/org/springblade/modules/article/entity/Article.java b/src/main/java/org/springblade/modules/article/entity/Article.java
index d6b73d5..3e7c269 100644
--- a/src/main/java/org/springblade/modules/article/entity/Article.java
+++ b/src/main/java/org/springblade/modules/article/entity/Article.java
@@ -96,4 +96,15 @@
 	 * 开启评论区 0:关闭 1:开启
 	 */
 	private String iscomment;
+
+	/**
+	 * 是否包含敏感词
+	 */
+	private String iswords;
+
+	/**
+	 * 敏感词内容
+	 */
+	@TableField("words_content")
+	private String wordsContent;
 }
diff --git a/src/main/java/org/springblade/modules/article/mapper/ArticleMapper.java b/src/main/java/org/springblade/modules/article/mapper/ArticleMapper.java
index 727c54e..97464fb 100644
--- a/src/main/java/org/springblade/modules/article/mapper/ArticleMapper.java
+++ b/src/main/java/org/springblade/modules/article/mapper/ArticleMapper.java
@@ -30,6 +30,8 @@
 	 */
 	List<Article> pageDate(IPage<Article> page, @Param("article") ArticleVo article);
 
+	List<Article> pageWords(IPage<Article> page, @Param("article") ArticleVo article);
+
 	List<Article> pageCollectList(IPage<Article> page, @Param("article") ArticleVo article);
 
 	/**
diff --git a/src/main/java/org/springblade/modules/article/mapper/ArticleMapper.xml b/src/main/java/org/springblade/modules/article/mapper/ArticleMapper.xml
index edcd5f8..d76b173 100644
--- a/src/main/java/org/springblade/modules/article/mapper/ArticleMapper.xml
+++ b/src/main/java/org/springblade/modules/article/mapper/ArticleMapper.xml
@@ -25,6 +25,34 @@
             AND CONCAT(title,source_name)
             LIKE CONCAT ('%', #{article.keyword},'%')
         </if>
+        and iswords = "0"
+        order by create_time desc
+    </select>
+
+    <!--查询资讯敏感词预警-->
+    <select id="pageWords" resultType="org.springblade.modules.article.entity.Article">
+        select * from sys_article
+        where 1=1
+        <if test="article.title!=null and article.title!=''">
+            and title like concat('%',#{article.title},'%')
+        </if>
+        <if test="article.sourceName!=null and article.sourceName!=''">
+            and source_name like concat('%',#{article.sourceName},'%')
+        </if>
+        <if test="article.startTime!=null and article.startTime!=''">
+            and create_time&gt;=#{article.startTime}
+        </if>
+        <if test="article.endTime!=null and article.endTime!=''">
+            and create_time&lt;=#{article.endTime}
+        </if>
+        <if test="article.articleType!=null and article.articleType!=''">
+            and article_type = #{article.articleType}
+        </if>
+        <if test="article.keyword!=null and article.keyword!=''">
+            AND CONCAT(title,source_name)
+            LIKE CONCAT ('%', #{article.keyword},'%')
+        </if>
+        and iswords = "1"
         order by create_time desc
     </select>
 
@@ -42,6 +70,7 @@
         <if test="(article.rolename==null and article.rolename=='') or (article.rolename!='administrator' and article.rolename!='policeAdmin')">
             AND publish = 1
         </if>
+        and iswords = "0"
         order by create_time desc
     </select>
 
@@ -64,6 +93,7 @@
         <if test="(article.rolename==null and article.rolename=='') or (article.rolename!='administrator' and article.rolename!='policeAdmin')">
             AND publish = 1
         </if>
+        and iswords = "0"
         order by create_time desc
     </select>
 
@@ -127,6 +157,7 @@
         <if test="(article.rolename==null and article.rolename=='') or (article.rolename!='administrator' and article.rolename!='policeAdmin')">
             AND publish = 1
         </if>
+        and iswords = "0"
         order by create_time desc
     </select>
 
@@ -191,6 +222,7 @@
         <if test="(article.rolename==null and article.rolename=='') or (article.rolename!='administrator' and article.rolename!='policeAdmin')">
             AND publish = 1
         </if>
+        and iswords = "0"
         order by create_time desc
     </select>
 
diff --git a/src/main/java/org/springblade/modules/article/service/ArticleService.java b/src/main/java/org/springblade/modules/article/service/ArticleService.java
index 55bce36..60cf393 100644
--- a/src/main/java/org/springblade/modules/article/service/ArticleService.java
+++ b/src/main/java/org/springblade/modules/article/service/ArticleService.java
@@ -27,6 +27,8 @@
 	 */
 	IPage<Article> pageDate(IPage<Article> page, ArticleVo article);
 
+	IPage<Article> pageWords(IPage<Article> page, ArticleVo article);
+
 	IPage<Article> pageCollectList(IPage<Article> page, ArticleVo article);
 
 	/**
diff --git a/src/main/java/org/springblade/modules/article/service/impl/ArticleServiceImpl.java b/src/main/java/org/springblade/modules/article/service/impl/ArticleServiceImpl.java
index 376f07f..010424d 100644
--- a/src/main/java/org/springblade/modules/article/service/impl/ArticleServiceImpl.java
+++ b/src/main/java/org/springblade/modules/article/service/impl/ArticleServiceImpl.java
@@ -39,6 +39,17 @@
 		return page.setRecords(baseMapper.pageDate(page,article));
 	}
 
+	/**
+	 * 查询资讯分页信息(敏感词预警)
+	 * @param page
+	 * @param article 资讯对象
+	 * @return
+	 */
+	@Override
+	public IPage<Article> pageWords(IPage<Article> page, ArticleVo article) {
+		return page.setRecords(baseMapper.pageWords(page,article));
+	}
+
 	@Override
 	public IPage<Article> pageCollectList(IPage<Article> page, ArticleVo article) {
 		return page.setRecords(baseMapper.pageCollectList(page,article));
diff --git a/src/main/java/org/springblade/modules/words/DemoApplication.java b/src/main/java/org/springblade/modules/words/DemoApplication.java
index d80b3d1..4ea5a32 100644
--- a/src/main/java/org/springblade/modules/words/DemoApplication.java
+++ b/src/main/java/org/springblade/modules/words/DemoApplication.java
@@ -7,9 +7,7 @@
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.nio.file.Paths;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
+import java.util.*;
 import java.util.function.Function;
 import java.util.stream.Stream;
 
@@ -17,9 +15,12 @@
 
 	public static void main(String[] args) throws Exception {
 
-		test_StringSearch();
-		test_WordsSearch();
+//		test_StringSearch();
+//		test_WordsSearch();
 
+		Map content = new HashMap();
+		content = interceptWords("nihoahsodahioda美国,大萨达日本");
+		System.out.println(content);
 //		test_StringSearchEx();
 //		test_WordsSearchEx();
 //
@@ -55,7 +56,7 @@
 //		test_issues_74();
 	}
 
-	public static String interceptWords(String content) {
+	public static Map interceptWords(String content) {
 		List<String> list = new ArrayList<String>();
 		list.add("美国");
 		list.add("日本");
@@ -64,10 +65,15 @@
 		StringSearch iwords = new StringSearch();
 		iwords.SetKeywords(list);
 
-//		boolean b = iwords.ContainsAny(test);
-//		if (b == false) {
-//			System.out.println("ContainsAny is Error.");
-//		}
+		Map res = new HashMap();
+
+		boolean b = iwords.ContainsAny(content);
+		if (b == false) {
+			System.out.println("ContainsAny is Error.");
+		}
+
+		res.put("iswords",b);
+
 //
 //		String f = iwords.FindFirst(test);
 //		if (f != "中国") {
@@ -89,7 +95,17 @@
 		if (str.equals("我是***") == false) {
 			System.out.println("Replace is Error.");
 		}
-		return str;
+		res.put("content",str);
+
+		String text = "";
+		List<String> all = iwords.FindAll(content);
+		for (int i = 0; i < all.size(); i++) {
+			text += all.get(i) + ",";
+		}
+
+		res.put("words",text.substring(0,text.length()-1));
+
+		return res;
 	}
 
 	public static void test_StringSearch() {
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
index 3e18fb4..dd1c9be 100644
--- a/src/main/resources/application-dev.yml
+++ b/src/main/resources/application-dev.yml
@@ -17,14 +17,14 @@
 #    username: root
 #    password: jfpt123
 
-    url: jdbc:mysql://localhost:2083/qfqkpublic?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true
-    username: root
-    password: zhba0728
-
-#    url: jdbc:mysql://223.82.109.183:2083/qfqkpublic?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true
+#    url: jdbc:mysql://localhost:2083/qfqkpublic?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true
 #    username: root
 #    password: zhba0728
 
+    url: jdbc:mysql://223.82.109.183:2083/qfqkpublic?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true
+    username: root
+    password: zhba0728
+
 #    url: jdbc:mysql://47.49.36.191:3306/qfqkpublic?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true
 #    username: root
 #    password: zhba0728

--
Gitblit v1.9.3