From ee98b13b0516c41e9949e9c4a44cad41a9833b17 Mon Sep 17 00:00:00 2001 From: xxy <1179705413@qq.com> Date: Sun, 17 Nov 2019 19:39:40 +0800 Subject: [PATCH] =?UTF-8?q?=E6=BC=AB=E7=94=BB=E5=86=85=E5=AE=B9=E9=A1=B5?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/config/FilterConfig.java | 3 +- .../common/filter/SearchFilter.java | 515 ++++++------------ .../src/main/resources/application.yml | 2 +- 3 files changed, 169 insertions(+), 351 deletions(-) diff --git a/novel-front/src/main/java/xyz/zinglizingli/common/config/FilterConfig.java b/novel-front/src/main/java/xyz/zinglizingli/common/config/FilterConfig.java index 9def961..5eb3c0d 100644 --- a/novel-front/src/main/java/xyz/zinglizingli/common/config/FilterConfig.java +++ b/novel-front/src/main/java/xyz/zinglizingli/common/config/FilterConfig.java @@ -1,13 +1,14 @@ package xyz.zinglizingli.common.config; import org.springframework.boot.web.servlet.FilterRegistrationBean; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import xyz.zinglizingli.common.filter.SearchFilter; @Configuration public class FilterConfig{ - //@Bean + @Bean public FilterRegistrationBean filterRegist() { FilterRegistrationBean frBean = new FilterRegistrationBean(); frBean.setFilter(new SearchFilter()); diff --git a/novel-front/src/main/java/xyz/zinglizingli/common/filter/SearchFilter.java b/novel-front/src/main/java/xyz/zinglizingli/common/filter/SearchFilter.java index 777b307..3361fa2 100644 --- a/novel-front/src/main/java/xyz/zinglizingli/common/filter/SearchFilter.java +++ b/novel-front/src/main/java/xyz/zinglizingli/common/filter/SearchFilter.java @@ -93,76 +93,35 @@ public class SearchFilter implements Filter { HttpServletResponse resp = (HttpServletResponse) servletResponse; String requestURL = req.getRequestURL().toString(); String requestURI = req.getRequestURI(); - if(requestURL.contains("www.zinglizingli.xyz") || requestURL.contains("sf.zinglizingli.xyz")){ - if(requestURI.matches("/*|(/index\\.html)")){ - String requestDispatcher = "/book/index.html"; - if(requestURL.contains("sf.zinglizingli.xyz")){ - requestDispatcher = "/book/searchSoftBook.html"; - } - req.getRequestDispatcher(requestDispatcher).forward(servletRequest,servletResponse); - return; - } - filterChain.doFilter(servletRequest,servletResponse); - return; - - } - try { - if (requestURL.matches("http://m.zinglizingli.xyz(/*|(/index\\.html))") || requestURI.startsWith("/static/")) { + if (!requestURL.contains("/manhua/")) { filterChain.doFilter(req, resp); return; } - if (cacheUtil == null) { - cacheUtil = SpringUtil.getBean(CommonCacheUtil.class); - } - - if (requestURL.contains("http://m.zinglizingli.xyz/search")) { - //搜索跳转 - Map otherParam = new HashMap<>(); - otherParam.put("t", "1"); - otherParam.put("keyword", req.getParameter("q")); - String realURL = "https://m.biquta.com/SearchBook.php"; - forObject = postBiquta(req, realURL, otherParam); - resp.setCharacterEncoding("utf-8"); - - } else { - - final String method = req.getMethod(); - if (requestURL.contains("www.zinglizingli.xyz")) { - - String realUrl = "https://m.biquge.info" + requestURI; - - String postFix = requestURI.substring(requestURI.lastIndexOf(".") + 1); + final String method = req.getMethod(); - // 案例:充当客户端通过restTemplate请求网络数据,并充当服务端将数据返回给浏览器 - // 客户端请求数据:输入流(byte[])==》字符串 - // 服务端响应数据:字符串 == 》 输出流(byte[]) + // 案例:充当客户端通过restTemplate请求网络数据,并充当服务端将数据返回给浏览器 + // 客户端请求数据:输入流(byte[])==》字符串 + // 服务端响应数据:字符串 == 》 输出流(byte[]) - //默认方式: - //RestTemplate restTemplate = new RestTemplate(); - // ①当返回的response-header的content-type属性有charset值时, - // restTemplate的StringHttpMessageConverter会设置默认charset为content-type属性 - // charset值 - // StringHttpMessageConverter.setDefaultCharset(Charset.forName(charset)); - // ②当返回的response-header的content-type属性没有charset值时 - // restTemplate的StringHttpMessageConverter会使用默认的charset即ISO-8859-1 + //默认方式: + //RestTemplate restTemplate = new RestTemplate(); + // ①当返回的response-header的content-type属性有charset值时, + // restTemplate的StringHttpMessageConverter会设置默认charset为content-type属性 + // charset值 + // StringHttpMessageConverter.setDefaultCharset(Charset.forName(charset)); + // ②当返回的response-header的content-type属性没有charset值时 + // restTemplate的StringHttpMessageConverter会使用默认的charset即ISO-8859-1 - if (picPostFix.contains(postFix)) { - // 对服务端请求返回的输入流(byte[])采用何种编码转换成字符串(String) - restTemplate = RestTemplateUtil.getInstance("ISO-8859-1");//请求图片 - realUrl = "https://www.biquge.info" + requestURI; - resp.setContentType("image/apng"); - } else { - // 对服务端请求返回的输入流(byte[])采用何种编码转换成字符串(String) - restTemplate = RestTemplateUtil.getInstance("utf-8");//请求html/css/js等文件 - // 对客户端响应返回的字符串(String)采用何种编码转换成输出流(byte[]) - resp.setCharacterEncoding("utf-8"); - setContentType(postFix, resp); + // 对服务端请求返回的输入流(byte[])采用何种编码转换成字符串(String) + restTemplate = RestTemplateUtil.getInstance("utf-8");//请求html/css/js等文件 + // 对客户端响应返回的字符串(String)采用何种编码转换成输出流(byte[]) + resp.setCharacterEncoding("utf-8"); /*//=====现在浏览器有编码自动识别功能,所以上面的代码没有加content-type的Header也没有问题========== //=====正确做法应该是下面代码片段1和代码片段2二选一========== @@ -181,311 +140,169 @@ public class SearchFilter implements Filter { resp.setContentType("text/html;charset=utf-8"); //===============================================代码片段2=============================== */ + + + if (HttpMethod.GET.name().equals(method)) { + + + String fileName = requestURI.substring(requestURI.lastIndexOf("/") + 1); + if (localFileFix.contains(fileName) || fileName.startsWith("9a4a540e-1759-4268-90fa-7fb652c3604a.")) { + filterChain.doFilter(servletRequest, servletResponse); + return; } - if (HttpMethod.GET.name().equals(method)) { - - - String fileName = requestURI.substring(requestURI.lastIndexOf("/") + 1); - if (localFileFix.contains(fileName) || fileName.startsWith("9a4a540e-1759-4268-90fa-7fb652c3604a.")) { - filterChain.doFilter(servletRequest, servletResponse); - return; - } - - - if (requestURI.matches(SUANWEI_BOOK_HTML_REGEX)) { - realUrl = realUrl.substring(0, realUrl.length() - 5); - } - - String queryString = req.getQueryString(); - if (queryString != null && queryString.length() > 0 && !queryString.contains("bsh_bid=")) { - queryString = "?" + URLDecoder.decode(req.getQueryString()); - } else { - queryString = ""; - } - realUrl = realUrl + queryString; - - - forObject = cacheUtil.get(realUrl); - if (forObject == null) { - - - ResponseEntity forEntity = restTemplate.getForEntity(realUrl, String.class); - forObject = forEntity.getBody(); - - // forObject = new String(forObject.getBytes("ISO-8859-1"),"utf-8"); - if (!picPostFix.contains(postFix)) { - forObject = forObject.replaceAll("https://m.biquge.info", "http://www.zinglizingli.xyz") - .replaceAll("https://www.biquge.info", "http://www.zinglizingli.xyz") - .replaceAll("笔趣岛", "酸味书屋") - .replaceAll("笔趣阁", "酸味书屋") - .replaceAll("登录", "登录") - .replaceAll("", "") - .replaceFirst("", "") - .replaceAll("", "") - .replaceAll("https://zhannei.baidu.com/cse", "http://m.zinglizingli.xyz") - .replaceAll("返回", "返回") - .replaceAll("加入书架", "加入收藏") - .replaceFirst("", "\n")//页面访问自动推送到百度 - .replaceAll("", "")//去除广告 - ; - forObject = addAttacDivForSearch(forObject, requestURI); - - forObject = setBookURIToHTML(forObject, SUANWEI_BOOK_REGEX); - - if (requestURI.matches(SUANWEI_BOOK_HTML_REGEX)) { - Pattern pattern = Pattern.compile("(.+)\\s+目录共\\d+章"); - Matcher matcher = pattern.matcher(forObject); - String title = ""; - if (matcher.find()) { - title = matcher.group(1); - }//
  • 类别:武侠仙侠
  • - pattern = Pattern.compile("

    作者:(.+)

    "); - matcher = pattern.matcher(forObject); - String author = ""; - if (matcher.find()) { - author = matcher.group(1); - } - pattern = Pattern.compile("(.+)"); - matcher = pattern.matcher(forObject); - String sort = ""; - if (matcher.find()) { - sort = matcher.group(1); - } - String desc = title + "," + title + "小说最新章节免费在线阅读、最新章节列表," + title + "小说最新更新免费提供,《" + title + "》是一本情节与文笔俱佳的" + sort + "小说,由作者" + author + "创建。"; - - forObject = forObject.replaceFirst("]+\"\\s*/?>", "");//[^>]+表示1个或多个不是>的字符 - forObject = forObject.replaceFirst("", ""); - - - } - - if ("/".equals(requestURI)) { - forObject = forObject.replaceFirst("]+\"\\s*/?>", "");//[^>]+表示1个或多个不是>的字符 - forObject = forObject.replaceFirst("", ""); - - - } - } - long timeout = 1800; - if (staticFileFix.contains(postFix)) { - timeout = 60 * 60 * 24; - } - cacheUtil.set(realUrl, forObject, timeout); - } - - + String queryString = req.getQueryString(); + if (queryString != null && queryString.length() > 0 && !queryString.contains("bsh_bid=")) { + queryString = "?" + URLDecoder.decode(req.getQueryString()); } else { - - - Map oldParameterMap = req.getParameterMap(); - Map newParameterMap = new HashMap<>(); - Set> entries = oldParameterMap.entrySet(); - for (Map.Entry entry : entries) { - newParameterMap.put(entry.getKey(), entry.getValue()[0]); - } - - MultiValueMap map = new LinkedMultiValueMap<>(); - map.setAll(newParameterMap); - HttpHeaders headers = new HttpHeaders(); - headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); - HttpEntity> request = new HttpEntity<>(map, headers); - forObject = restTemplate.postForEntity(realUrl, request, String.class).getBody(); - // forObject = new String(forObject.getBytes("ISO-8859-1"),"utf-8"); - forObject = forObject.replaceAll("https://m.biquge.info", "http://www.zinglizingli.xyz") - .replaceAll("https://www.biquge.info", "http://www.zinglizingli.xyz") - .replaceAll("笔趣岛", "酸味书屋") - .replaceAll("笔趣阁", "酸味书屋") - .replaceAll("https://zhannei.baidu.com/cse", "http://m.zinglizingli.xyz") - .replaceFirst("", "") - .replaceAll("书架", "笔记") - .replaceAll("返回", "返回") - ; - forObject = setBookURIToHTML(forObject, SUANWEI_BOOK_REGEX); - //resp.setCharacterEncoding("utf-8"); - //setContentType(postFix, resp); - + queryString = ""; } - } else if (requestURL.contains("m.zinglizingli.xyz")) { - String realUrl = "https://m.biquta.com" + requestURI; + if (forObject == null) { - String postFix = requestURI.substring(requestURI.lastIndexOf(".") + 1); - if (picPostFix.contains(postFix)) { - restTemplate = RestTemplateUtil.getInstance("ISO-8859-1");//请求图片 - resp.setContentType("image/apng"); - } else { - restTemplate = RestTemplateUtil.getInstance("utf-8");//请求html/css/js等文件 - resp.setCharacterEncoding("utf-8"); - setContentType(postFix, resp); + ResponseEntity forEntity = restTemplate.getForEntity("https://www.dmzj.com/"+requestURI.substring(8), String.class); + forObject = forEntity.getBody(); + + // forObject = new String(forObject.getBytes("ISO-8859-1"),"utf-8"); + int i = forObject.indexOf("class=\"mainNav independNav\""); + forObject=forObject.replace("class=\"mainNav independNav\"","style='display:none' class=\"mainNav independNav\""); + forObject=forObject.replace("https://www.dmzj.com/js/ad/ad_12.js",""); + forObject=forObject.replace("class=\"wrap_last_head autoHeight\"","style='display:none' class=\"wrap_last_head autoHeight\""); + forObject=forObject.replace("class=\"wrap_last_mid autoHeight\"","style='display:none' class=\"wrap_last_mid autoHeight\""); + forObject=forObject.replace("https://www.dmzj.com/js/ad/ad_13.js",""); + forObject=forObject.replace("class=\"comic_gd autoHeight\"","style='display:none' class=\"comic_gd autoHeight\""); + forObject=forObject.replace("class=\"comic_last autoHeight\"","style='display:none' class=\"comic_last autoHeight\""); + forObject=forObject.replace("class=\"side_bar autoHeight\"","style='display:none' class=\"side_bar autoHeight\""); + forObject=forObject.replace("
    ",""); + forObject=forObject.replace("class=\"red_box\"","style='display:none' class=\"red_box\""); + forObject=forObject.replace("
    ",""); + forObject=forObject.replace("
    ",""); + forObject=forObject.replace("class=\"side_public\"","style='display:none' class=\"side_public\""); + forObject=forObject.replace("class=\"foot-detail\"","style='display:none' class=\"foot-detail\""); + forObject=forObject.replace("https://static.dmzj.com/ocomic/js/dmzjMhFinally-new.js",""); + forObject=forObject.replace("https://static.dmzj.com/ocomic/js/dmzjMhFinally-new.js",""); + forObject=forObject.replace("https://static.dmzj.com/module/js/float_code.js",""); + forObject=forObject.replaceAll("",""); + forObject=forObject.replaceAll("https://static.dmzj.com/public/js/dmzj-land-2015.6.js",""); + forObject=forObject.replaceAll("",""); + forObject=forObject.replaceAll("",""); + forObject=forObject.replaceAll("",""); + forObject=forObject.replace("
    ","") +// forObject = forObject.replaceAll("/manhua/", "https://www.dmzj.com/") +// .replaceAll("笔趣岛", "酸味书屋") +// .replaceAll("笔趣阁", "酸味书屋") +// .replaceAll("class=\"mainNav independNav\"", "style='dispaly:none' class=\"mainNav independNav\"") +// .replaceAll("", "") +// .replaceFirst("", "") +// .replaceAll("", "") +// .replaceAll("https://zhannei.baidu.com/cse", "http://m.zinglizingli.xyz") +// .replaceAll("返回", "返回") +// .replaceAll("加入书架", "加入收藏") +// .replaceFirst("", "\n")//页面访问自动推送到百度 +// .replaceAll("", "")//去除广告 + ; + + +// if (requestURI.matches(SUANWEI_BOOK_HTML_REGEX)) { +// Pattern pattern = Pattern.compile("(.+)\\s+目录共\\d+章"); +// Matcher matcher = pattern.matcher(forObject); +// String title = ""; +// if (matcher.find()) { +// title = matcher.group(1); +// }//
  • 类别:武侠仙侠
  • +// pattern = Pattern.compile("

    作者:(.+)

    "); +// matcher = pattern.matcher(forObject); +// String author = ""; +// if (matcher.find()) { +// author = matcher.group(1); +// } +// pattern = Pattern.compile("(.+)"); +// matcher = pattern.matcher(forObject); +// String sort = ""; +// if (matcher.find()) { +// sort = matcher.group(1); +// } +// String desc = title + "," + title + "小说最新章节免费在线阅读、最新章节列表," + title + "小说最新更新免费提供,《" + title + "》是一本情节与文笔俱佳的" + sort + "小说,由作者" + author + "创建。"; +// +// forObject = forObject.replaceFirst("]+\"\\s*/?>", "");//[^>]+表示1个或多个不是>的字符 +// forObject = forObject.replaceFirst("", ""); +// +// +// } +// +// if ("/".equals(requestURI)) { +// forObject = forObject.replaceFirst("]+\"\\s*/?>", "");//[^>]+表示1个或多个不是>的字符 +// forObject = forObject.replaceFirst("", ""); +// +// +// } } - if (HttpMethod.GET.name().equals(method)) { - - String fileName = requestURI.substring(requestURI.lastIndexOf("/") + 1); - - if (localFileFix.contains(fileName) || fileName.startsWith("9a4a540e-1759-4268-90fa-7fb652c3604a.")) { - filterChain.doFilter(servletRequest, servletResponse); - return; - } - - - if (requestURI.matches(XIYANGYANG_BOOK_HTML_REGEX)) { - realUrl = realUrl.substring(0, realUrl.length() - 5); - } - String queryString = req.getQueryString(); - if (queryString != null && queryString.length() > 0 && !queryString.contains("bsh_bid=")) { - queryString = "?" + URLDecoder.decode(req.getQueryString()); - } else { - queryString = ""; - } - realUrl = realUrl + queryString; - - - forObject = cacheUtil.get(realUrl); - if (forObject == null) { - forObject = restTemplate.getForEntity(realUrl, String.class).getBody(); - - if (!picPostFix.contains(postFix)) { - forObject = forObject.replaceAll("https://m.biquta.com", "http://m.zinglizingli.xyz") - .replaceAll("笔趣阁", "看小说吧") - .replaceAll("笔趣塔", "看小说吧") - .replaceFirst("看小说吧手机版-看小说吧", "看小说吧") - .replaceFirst("content=\"看小说吧\"", "content=\"小说阅读,小说排行,好看小说排行,热门小说排行,小说阅读手机版\"") - .replaceAll("登录", "登录") - .replaceFirst("", "") - .replaceAll("书架", "收藏") - .replaceAll("加入书架", "加入收藏") - .replaceAll("我的书架", "") - .replaceFirst("阅读记录","客户端下载") - .replaceAll("我的书架", "轻小说精品小说") - .replaceAll("", "") - - .replaceFirst("", "\n") - - .replaceFirst("", "\n")//页面访问自动推送到百度 - .replaceAll("", "");//去除广告 - - forObject = addAttacDivForSearch(forObject, requestURI); - - forObject = setBookURIToHTML(forObject, XIYANGYANG_BOOK_REGEX); - - if (requestURI.matches(XIYANGYANG_BOOK_HTML_REGEX)) { - Pattern pattern = Pattern.compile("(.+)"); - Matcher matcher = pattern.matcher(forObject); - String title = ""; - if (matcher.find()) { - title = matcher.group(1); - }//
  • 类别:武侠仙侠
  • - pattern = Pattern.compile("作者:(.+)"); - matcher = pattern.matcher(forObject); - String author = ""; - if (matcher.find()) { - author = matcher.group(1); - } - pattern = Pattern.compile("\\s+类别:(.+)"); - matcher = pattern.matcher(forObject); - String sort = ""; - if (matcher.find()) { - sort = matcher.group(1); - } - String desc = title + "," + title + "小说最新章节免费在线阅读、最新章节列表," + title + "小说最新更新免费提供,《" + title + "》是一本情节与文笔俱佳的" + sort + "小说,由作者" + author + "创建。"; - - forObject = forObject.replaceFirst("]+\"\\s*/?>", "");//[^>]+表示1个或多个不是>的字符 - forObject = forObject.replaceFirst("", ""); - - - } - - if ("/".equals(requestURI)) { - forObject = forObject.replaceFirst("]+\"\\s*/?>", "");//[^>]+表示1个或多个不是>的字符 - forObject = forObject.replaceFirst("", ""); - - /*forObject = forObject.replaceFirst("", "" + jsString) - .replaceFirst("", "" + imagDiv);*/ - // forObject = forObject.replaceFirst("", "" + imagDiv); - - - } - } - - // forObject = forObject.replaceFirst("", "分享按钮\n" + - // " "); - - /* if (forObject.contains("class=\"sortChannel_nav\"") || forObject.contains("channelHeader2")) { - forObject = forObject.replaceFirst("class=\"searchForm\"", "class=\"searchForm\" style=\"display:none\""); - - }*/ - long timeout = 1800; - if (staticFileFix.contains(postFix)) { - timeout = 60 * 60 * 24; - } - cacheUtil.set(realUrl, forObject, timeout); - } - - - } else { - forObject = postBiquta(req, realUrl, null); - } } else { - return; + + + Map oldParameterMap = req.getParameterMap(); + Map newParameterMap = new HashMap<>(); + Set> entries = oldParameterMap.entrySet(); + for (Map.Entry entry : entries) { + newParameterMap.put(entry.getKey(), entry.getValue()[0]); + } + + MultiValueMap map = new LinkedMultiValueMap<>(); + map.setAll(newParameterMap); + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); + HttpEntity> request = new HttpEntity<>(map, headers); + forObject = restTemplate.postForEntity("https://www.dmzj.com/"+requestURI.substring(8), request, String.class).getBody(); + // forObject = new String(forObject.getBytes("ISO-8859-1"),"utf-8"); + forObject = forObject.replaceAll("/manhua/", "https://www.dmzj.com/") + .replaceAll("笔趣岛", "酸味书屋") + .replaceAll("笔趣阁", "酸味书屋") + .replaceFirst("", "") + .replaceAll("书架", "笔记") + .replaceAll("返回", "返回") + ; + forObject = setBookURIToHTML(forObject, SUANWEI_BOOK_REGEX); + //resp.setCharacterEncoding("utf-8"); + //setContentType(postFix, resp); + } - } + + } catch (RuntimeException e) { log.error(e.getMessage(), e); @@ -605,7 +422,7 @@ public class SearchFilter implements Filter { .replaceFirst("content=\"看小说吧\"", "content=\"小说阅读,小说排行,好看小说排行,热门小说排行,小说阅读手机版\"") .replaceFirst("", "") .replaceAll("我的书架", "轻小说精品小说") - .replaceFirst("阅读记录","客户端下载") + .replaceFirst("阅读记录", "客户端下载") .replaceFirst("", "