src/main/java/org/springblade/modules/FTP/FtpUploadFile.java
New file @@ -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(); } } } 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)); 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; } 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); /** 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>=#{article.startTime} </if> <if test="article.endTime!=null and article.endTime!=''"> and create_time<=#{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> 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); /** 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)); 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() { 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