src/main/java/com/yeshi/buwan/aspect/SignAspect.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/yeshi/buwan/controller/api/HelpController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/yeshi/buwan/controller/parser/CommentParser.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/yeshi/buwan/controller/parser/UserParser.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/yeshi/buwan/filter/RequestFilter.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/resources/env-dev/logback.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/webapp/WEB-INF/web.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/test/java/com/hxh/spring/test/log/LogTest.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/yeshi/buwan/aspect/SignAspect.java
@@ -9,8 +9,15 @@ import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.springframework.stereotype.Component; import org.springframework.util.MultiValueMap; import org.springframework.web.context.request.RequestAttributes; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.multipart.MultipartResolver; import org.springframework.web.multipart.commons.CommonsMultipartResolver; import org.springframework.web.multipart.support.DefaultMultipartHttpServletRequest; import org.yeshi.utils.StringUtil; import javax.annotation.Resource; @@ -31,9 +38,9 @@ //签名验证 @Around("execution(public * com.yeshi.buwan.controller.api.*.*(..))") public Object verifySign(ProceedingJoinPoint joinPoint) throws Throwable { ServletRequestAttributes servletContainer = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletRequest request = servletContainer.getRequest(); HttpServletResponse response = servletContainer.getResponse(); RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes(); HttpServletRequest request = (HttpServletRequest) requestAttributes.resolveReference(RequestAttributes.REFERENCE_REQUEST); HttpServletResponse response = ((ServletRequestAttributes) requestAttributes).getResponse(); PrintWriter out = null; AcceptData acceptData = null; Object[] args = joinPoint.getArgs(); @@ -50,14 +57,16 @@ //布丸3.8.7之后调用新的签名方法 if (acceptData != null && "android".equalsIgnoreCase(acceptData.getPlatform()) && acceptData.getVersion() >= 105) { Map<String, String[]> params = request.getParameterMap(); //签名 List<String> list = new ArrayList<>(); //签名 for (Iterator<String> its = params.keySet().iterator(); its.hasNext(); ) { String key = its.next(); if ("sign".equalsIgnoreCase(key)) continue; list.add(key + "=" + params.get(key)[0]); } Collections.sort(list); String str = StringUtil.concat(list, "&"); String sign = StringUtil.Md5(str + "8888B&*@-uWan88/',@@^"); src/main/java/com/yeshi/buwan/controller/api/HelpController.java
New file @@ -0,0 +1,74 @@ package com.yeshi.buwan.controller.api; import com.yeshi.buwan.controller.EmailController; import com.yeshi.buwan.util.COSManager; import com.yeshi.buwan.util.JsonUtilV2; import com.yeshi.buwan.util.StringUtil; import com.yeshi.buwan.util.TimeUtil; import com.yeshi.buwan.util.email.MailSenderUtil; import com.yeshi.buwan.vo.AcceptData; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.multipart.MultipartFile; import org.yeshi.utils.annotation.RequestSerializableByKey; import javax.servlet.http.HttpServletRequest; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.UUID; @Controller @RequestMapping("api/v2/help") public class HelpController { Logger logger = LoggerFactory.getLogger(HelpController.class); /** * @return java.lang.String * @author hxh * @description 隐私投诉 * @date 19:14 2021/10/15 * @param: acceptData * @param: loginUid **/ @RequestSerializableByKey(key="#acceptData.device") @RequestMapping("privacyReport") @ResponseBody public String privacyReport(AcceptData acceptData, HttpServletRequest request, MultipartFile[] images) { String content = request.getParameter("content"); logger.info("隐私投诉内容:" + content); String urlList = ""; if (images != null && images.length > 0) for (MultipartFile f : images) { try { String name = TimeUtil.getGernalTime(System.currentTimeMillis(), "yyyyMMddHHmmssSSS") + "_" + ((int) (Math.random() * 100000)) + ".jpg"; String result = COSManager.getInstance().uploadFile(f.getInputStream(), "privacy/report/" + name); urlList += result + " , "; } catch (IOException e) { e.printStackTrace(); } } String title = "隐私投诉:" + content; StringBuffer buffer = new StringBuffer(); buffer.append("包名:"+acceptData.getPackageName()); buffer.append("\n\r"); buffer.append("UTDID:"+acceptData.getUtdId()); buffer.append("\n\r"); buffer.append("DEVICE:"+acceptData.getDevice()); buffer.append("\n\r"); buffer.append("投诉内容:"); buffer.append(content); buffer.append("\n\r"); buffer.append("提供的截图为:" + urlList); MailSenderUtil.sendEmail("yesbd@qq.com","buwanysdq@163.com", "weikou2014",title,buffer.toString()); return JsonUtilV2.loadTrueJson("成功"); } } src/main/java/com/yeshi/buwan/controller/parser/CommentParser.java
@@ -22,6 +22,8 @@ import com.yeshi.buwan.vo.AcceptData; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import org.yeshi.utils.entity.wx.WeiXinUser; @@ -35,6 +37,9 @@ @Controller public class CommentParser { Logger logger = LoggerFactory.getLogger(CommentParser.class); @Resource private SystemService systemService; @Resource @@ -90,6 +95,7 @@ } LoginInfoDto loginInfoDto = new LoginInfoDto(); loginInfoDto.setIpInfo(IPUtil.getRemotIP(request) + ":" + request.getRemotePort()); loginInfoDto.setSystemId(acceptData.getDetailSystem().getSystem().getId()); int loginTypeInt = Integer.parseInt(loginType); @@ -153,9 +159,13 @@ } //通过code换取个人信息 WeiXinUser weiXinUser = MyWXLoginUtil.getUserInfo(code, MyWXLoginUtil.WEIXIN_APPID, MyWXLoginUtil.WEIXIN_SECRET); try { logger.error("微信登录:" + new GsonBuilder().create().toJson(weiXinUser)); } catch (Exception e) { } if (weiXinUser == null) { out.print(JsonUtil.loadFalseJson("获取授权信息失败")); out.print(JsonUtil.loadFalseJson("获取授权信息失败,请稍后再试")); return; } @@ -163,6 +173,7 @@ loginInfoDto.setSystemId(acceptData.getDetailSystem().getSystem().getId()); loginInfoDto.setLoginType(LoginUser.LOGIN_TYPE_WX); loginInfoDto.setWeiXinUser(weiXinUser); loginInfoDto.setIpInfo(IPUtil.getRemotIP(request) + ":" + request.getRemotePort()); try { @@ -179,7 +190,14 @@ if (e.getCode() == LoginUserException.CODE_NO_USER) { //注册 try { userService.register(loginInfoDto); LoginUser lu = userService.register(loginInfoDto); if (lu != null) { JSONObject object = new JSONObject(); object.put("user", new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create().toJson(lu)); out.print(JsonUtil.loadTrueJson(object.toString())); } else { out.print(JsonUtil.loadFalseJson("登录失败")); } } catch (RegisterUserException e1) { out.print(JsonUtil.loadFalseJson("登录失败")); } src/main/java/com/yeshi/buwan/controller/parser/UserParser.java
@@ -1204,6 +1204,7 @@ loginInfoDto.setSystemId(acceptData.getDetailSystem().getSystem().getId()); loginInfoDto.setEmail(account); loginInfoDto.setPwd(StringUtil.Md5(pwd)); loginInfoDto.setIpInfo(IPUtil.getRemotIP(request) + ":" + request.getRemotePort()); try { LoginUser user = userService.login(loginInfoDto); out.print(JsonUtil.loadTrueJson(StringUtil.outPutResultJson(user))); src/main/java/com/yeshi/buwan/filter/RequestFilter.java
New file @@ -0,0 +1,40 @@ package com.yeshi.buwan.filter; import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.multipart.MultipartResolver; import org.springframework.web.multipart.commons.CommonsMultipartResolver; import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import java.io.IOException; /** * @author hxh * @title: RequestFilter * @description: request过滤器 * @date 2021/10/16 13:40 */ public class RequestFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest httpRequest = (HttpServletRequest) servletRequest; String contentType = httpRequest.getContentType(); if (contentType != null && contentType.contains("multipart/form-data")) { MultipartResolver resolver = new CommonsMultipartResolver(httpRequest.getSession().getServletContext()); MultipartHttpServletRequest multipartRequest = resolver.resolveMultipart(httpRequest); // 将转化后的 request 放入过滤链中 servletRequest = multipartRequest; } filterChain.doFilter(servletRequest, servletResponse); } @Override public void destroy() { } } src/main/resources/env-dev/logback.xml
@@ -60,6 +60,27 @@ </appender> <appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log.filePath}/debug/debug.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log.filePath}/debug/debug.%d{yyyy-MM-dd}.log.zip</fileNamePattern> <maxHistory>${log.maxHistory}</maxHistory> </rollingPolicy> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern> ${log.pattern} </pattern> </layout> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>DEBUG</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!-- DEBUG --> <!-- 客户端接口出错 --> <appender name="apiErrorAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> @@ -149,8 +170,9 @@ </logger> <logger name="com.yeshi.buwan" level="INFO" additivity="true"> <logger name="com.yeshi.buwan" level="DEBUG" additivity="true"> <appender-ref ref="ERROR_FILE"></appender-ref> <appender-ref ref="DEBUG_FILE"></appender-ref> </logger> @@ -218,5 +240,7 @@ <level value="INFO"/> <!--在控制台中输出所在层级对应level(以及大于level)的日志信息,因为这里并没有设置LevelFilter--> <appender-ref ref="STDOUT"></appender-ref> <appender-ref ref="DEBUG_FILE"></appender-ref> </root> </configuration> src/main/webapp/WEB-INF/web.xml
@@ -24,6 +24,18 @@ <param-value>true</param-value> </init-param> </filter> <filter> <filter-name>RequestFilter</filter-name> <filter-class>com.yeshi.buwan.filter.RequestFilter</filter-class> </filter> <filter-mapping> <filter-name>RequestFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> src/test/java/com/hxh/spring/test/log/LogTest.java
New file @@ -0,0 +1,33 @@ package com.hxh.spring.test.log; import org.junit.Test; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.util.Scanner; /** * @author Administrator * @title: LogTest * @description: TODO * @date 2021/10/11 14:46 */ public class LogTest { @Test public void access() throws FileNotFoundException { Scanner scanner = new Scanner(new FileInputStream(new File("C:\\Users\\Administrator\\Downloads\\202110111057018682009979\\localhost_access_log.2021-10-11.txt"))); while (scanner.hasNextLine()) { String content = scanner.nextLine(); if (content.contains("comment")) { System.out.println(content); } } scanner.close(); } }