diff --git a/novel-admin/src/main/resources/templates/books/book/add.html b/novel-admin/src/main/resources/templates/books/book/add.html index 91b395a..c719ef2 100644 --- a/novel-admin/src/main/resources/templates/books/book/add.html +++ b/novel-admin/src/main/resources/templates/books/book/add.html @@ -10,19 +10,20 @@
- -
- + +
+ +
-
- + + type="hidden">
@@ -104,7 +105,7 @@ size: 1000, accept: 'file', done: function (r) { - $("#picImage").attr("src",r.fileName); + $("#picImage").attr("src", r.fileName); $("#picUrl").val(r.fileName); }, error: function (r) { diff --git a/novel-front/pom.xml b/novel-front/pom.xml index 45c48a0..69c0401 100644 --- a/novel-front/pom.xml +++ b/novel-front/pom.xml @@ -10,7 +10,7 @@ xyz.zinglizingli novel-front - 2.0.1 + 2.0.2.beta novel-front 小说精品楼-前台web网站 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 bdcfa72..6e8057d 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 @@ -3,6 +3,7 @@ package xyz.zinglizingli.common.filter; import com.fasterxml.jackson.databind.ObjectMapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.core.io.Resource; import org.springframework.http.*; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; @@ -15,7 +16,7 @@ import xyz.zinglizingli.common.utils.SpringUtil; import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import java.io.IOException; +import java.io.*; import java.net.URLDecoder; import java.util.*; import java.util.regex.Matcher; @@ -105,23 +106,23 @@ public class SearchFilter implements Filter { 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 - // 对服务端请求返回的输入流(byte[])采用何种编码转换成字符串(String) - restTemplate = RestTemplateUtil.getInstance("utf-8");//请求html/css/js等文件 - // 对客户端响应返回的字符串(String)采用何种编码转换成输出流(byte[]) - resp.setCharacterEncoding("utf-8"); + // 对服务端请求返回的输入流(byte[])采用何种编码转换成字符串(String) + restTemplate = RestTemplateUtil.getInstance("utf-8");//请求html/css/js等文件 + // 对客户端响应返回的字符串(String)采用何种编码转换成输出流(byte[]) + resp.setCharacterEncoding("utf-8"); /*//=====现在浏览器有编码自动识别功能,所以上面的代码没有加content-type的Header也没有问题========== //=====正确做法应该是下面代码片段1和代码片段2二选一========== @@ -142,45 +143,81 @@ public class SearchFilter implements Filter { */ - if (HttpMethod.GET.name().equals(method)) { + 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); + String fileName = requestURI.substring(requestURI.lastIndexOf("/") + 1); + if (localFileFix.contains(fileName) || fileName.startsWith("9a4a540e-1759-4268-90fa-7fb652c3604a.")) { + filterChain.doFilter(servletRequest, servletResponse); + return; + } + + + String queryString = req.getQueryString(); + if (queryString != null && queryString.length() > 0 && !queryString.contains("bsh_bid=")) { + queryString = "?" + URLDecoder.decode(req.getQueryString()); + } else { + queryString = ""; + } + + + if (forObject == null) { + String postFix = requestURI.substring(requestURI.lastIndexOf(".") + 1); + if (picPostFix.contains(postFix)) { + // 对服务端请求返回的输入流(byte[])采用何种编码转换成字符串(String) + restTemplate = RestTemplateUtil.getInstance("iso-8859-1");//请求图片 + resp.setContentType("image/apng"); + } + if (requestURI.startsWith("/manhua/images/")) { + HttpHeaders headers = new HttpHeaders(); + headers.add("Referer","https://www.dmzj.com"); + HttpEntity requestEntity = new HttpEntity<>(null, headers); + String realUrl = "https://images.dmzj.com/" + requestURI.substring(15); + ResponseEntity resEntity = restTemplate.exchange(realUrl, HttpMethod.GET, requestEntity, Resource.class); + InputStream input = resEntity.getBody().getInputStream(); + OutputStream out = resp.getOutputStream(); + byte[] b = new byte[4096]; + for (int n; (n = input.read(b)) != -1;) { + out.write(b, 0, n); + } + input.close(); + out.close(); return; - } + + + // 对服务端请求返回的输入流(byte[])采用何种编码转换成字符串(String) - String queryString = req.getQueryString(); - if (queryString != null && queryString.length() > 0 && !queryString.contains("bsh_bid=")) { - queryString = "?" + URLDecoder.decode(req.getQueryString()); - } else { - queryString = ""; - } + } else if(requestURI.startsWith("/manhua/statics/")){ + String realPath = "https://static.dmzj.com/"+requestURI.substring(16); + ResponseEntity forEntity = restTemplate.getForEntity(realPath, String.class); + forObject = forEntity.getBody(); + forObject = forObject.replaceAll("https://images.dmzj.com/", "/manhua/images/"); - if (forObject == null) { + }else { + String realPath = "https://www.dmzj.com/" + requestURI.substring(8); - - ResponseEntity forEntity = restTemplate.getForEntity("https://www.dmzj.com/"+requestURI.substring(8), String.class); + ResponseEntity forEntity = restTemplate.getForEntity(realPath, String.class); forObject = forEntity.getBody(); // forObject = new String(forObject.getBytes("ISO-8859-1"),"utf-8"); - forObject=forObject.replace("https://www.dmzj.com/js/ad/ad_12.js",""); - forObject=forObject.replace("https://www.dmzj.com/js/ad/ad_13.js",""); - 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.replaceAll("globalNav.js",""); - forObject=forObject.replaceAll("TSB.js",""); - forObject=forObject+"", ""); + 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.replaceAll("globalNav.js", ""); + forObject = forObject.replaceAll("TSB.js", ""); + forObject = forObject.replaceAll("https://images.dmzj.com/", "/manhua/images/"); + forObject = forObject.replaceAll("https://static.dmzj.com/", "/manhua/statics/"); + forObject = forObject + ""; - forObject=forObject+"\n")//页面访问自动推送到百度 // .replaceAll("", "")//去除广告 - ; + ; // if (requestURI.matches(SUANWEI_BOOK_HTML_REGEX)) { @@ -276,47 +313,47 @@ public class SearchFilter implements Filter { // // } } - - - } 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("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); - } + } 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("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); @@ -333,6 +370,7 @@ public class SearchFilter implements Filter { //resp.setCharacterEncoding("utf-8"); } + resp.getWriter().print(forObject); return; } diff --git a/novel-front/src/main/resources/application.yml b/novel-front/src/main/resources/application.yml index 6723f4e..e58095d 100644 --- a/novel-front/src/main/resources/application.yml +++ b/novel-front/src/main/resources/application.yml @@ -3,12 +3,12 @@ server: spring: datasource: -# url: jdbc:mysql://148.70.59.92:3306/books?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai -# username: xiongxiaoyang -# password: Lzslov123! - url: jdbc:mysql://127.0.0.1:3306/books?useUnicode=true&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai + url: jdbc:mysql://127.0.0.1:3306/books?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai username: books password: books +# url: jdbc:mysql://127.0.0.1:3306/books?useUnicode=true&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai +# username: root +# password: test123456 cache: ehcache: config: classpath:ehcache.xml