洪城义警-正式版后台
zengh
2021-11-19 df228e999b0ac567ac551e6a3339b5ecb548476f
穿透修改
8 files modified
1 files added
270 ■■■■■ changed files
src/main/java/org/springblade/modules/FTP/FtpUploadFile.java 134 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/article/controller/ArticleController.java 30 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/article/entity/Article.java 11 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/article/mapper/ArticleMapper.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/article/mapper/ArticleMapper.xml 32 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/article/service/ArticleService.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/article/service/impl/ArticleServiceImpl.java 11 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/words/DemoApplication.java 38 ●●●● patch | view | raw | blame | history
src/main/resources/application-dev.yml 10 ●●●● patch | view | raw | blame | history
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&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>
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