diff --git a/src/main/java/com/szxgl/pars2021/config/InterceptorConfig.java b/src/main/java/com/szxgl/pars2021/config/InterceptorConfig.java deleted file mode 100644 index a805a3b..0000000 --- a/src/main/java/com/szxgl/pars2021/config/InterceptorConfig.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.szxgl.pars2021.config; - -//@Configuration -//public class InterceptorConfig implements WebMvcConfigurer { -// -//// @Bean -// NorsInterceptor getNorsInterceptor() { -// return new NorsInterceptor(); -// } -// -// @Override -// public void addInterceptors(InterceptorRegistry registry) { -// -// // 跨域拦截器放在最上面 -// registry.addInterceptor(getNorsInterceptor()) -// .addPathPatterns("/**"); -// } -//} diff --git a/src/main/java/com/szxgl/pars2021/config/NorsInterceptor.java b/src/main/java/com/szxgl/pars2021/config/NorsInterceptor.java deleted file mode 100644 index b29eda1..0000000 --- a/src/main/java/com/szxgl/pars2021/config/NorsInterceptor.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.szxgl.pars2021.config; - -/** - * 跨域拦截器的配置 - */ -//@Slf4j -//public class NorsInterceptor implements HandlerInterceptor { -// @Override -// public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { -// response.setHeader("Access-Control-Allow-Origin", request.getHeader("Referer")); -// response.setHeader("Access-Control-Allow-Credentials", "true"); -// response.setHeader("Access-Control-Allow-Methods", "GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS"); -// response.setHeader("Access-Control-Max-Age", "86400"); -// response.setHeader("Access-Control-Allow-Headers", "*"); -// -// // 如果是OPTIONS则结束请求 -// if (HttpMethod.OPTIONS.toString().equals(request.getMethod())) { -// response.setStatus(HttpStatus.NO_CONTENT.value()); -// return false; -// } -// -// return true; -// } -//} diff --git a/src/main/java/com/szxgl/pars2021/controller/PraiseController.java b/src/main/java/com/szxgl/pars2021/controller/PraiseController.java index 5e60be2..b25d36b 100644 --- a/src/main/java/com/szxgl/pars2021/controller/PraiseController.java +++ b/src/main/java/com/szxgl/pars2021/controller/PraiseController.java @@ -41,12 +41,12 @@ public class PraiseController { * @return */ @PostMapping("/savePraise") - public R savePraise(HttpServletRequest request,Integer worksId,String openid){ - /*String openid = getValue(request.getCookies(), "openid"); + public R savePraise(HttpServletRequest request,Integer worksId){ + String openid = getValue(request.getCookies(), "openid"); if("prod".equals(activeProfiles) && StringUtils.isBlank(openid)){ log.error("openid为空,请求参数"); return R.error("openid不能为空"); - }*/ + } if(worksId == null){ log.error("作品id不能为空!"); return R.error("作品id不能为空!"); diff --git a/src/main/java/com/szxgl/pars2021/controller/RankingController.java b/src/main/java/com/szxgl/pars2021/controller/RankingController.java index c2f91ea..b42af36 100644 --- a/src/main/java/com/szxgl/pars2021/controller/RankingController.java +++ b/src/main/java/com/szxgl/pars2021/controller/RankingController.java @@ -63,12 +63,12 @@ public class RankingController { * @return */ @GetMapping("/getWorksPraiseNo") - public R getWorksPraiseNo(HttpServletRequest request,String openid){ - /*String openid = getValue(request.getCookies(), "openid"); + public R getWorksPraiseNo(HttpServletRequest request){ + String openid = getValue(request.getCookies(), "openid"); if("prod".equals(activeProfiles) && StringUtils.isBlank(openid)){ log.error("openid为空,请求参数"); return R.error("openid不能为空"); - }*/ + } List userDOS = userService.getUserList(); @@ -133,10 +133,50 @@ public class RankingController { } //list按分数升序 list.sort(Comparator.comparing(UserWorks::getRank)); + //返回排行榜滚动信息 + List list2 = new ArrayList<>(); + //获取所有排行榜用户信息 + set = redisUtil.rangeWithScores(RANKING, 0, -1); + for (ZSetOperations.TypedTuple objectTypedTuple : set) { + Long aLong = redisUtil.reverseRank(RANKING, objectTypedTuple.getValue()); + //判断redis中是否有用户信息 + if(redisUtil.hasKey(USERINFO+objectTypedTuple.getValue())){ + //redis获取用户信息 + UserWorks userWorks = (UserWorks)redisUtil.get(USERINFO + objectTypedTuple.getValue()); + userWorks.setRank(aLong+1); + list2.add(userWorks); + } + } + List newList = new ArrayList<>(); + Map hashMap = new HashMap<>(); + int size = 0; + //用户数量大于8 随机返回的排行榜用户名称不包括前8名 + if(list2.size() > 8 ){ + size = list2.subList(8, list2.size()).size(); + size = size < 8 ? size : 8; + list2.sort(Comparator.comparing(UserWorks::getRank)); + while (hashMap.size() < size) { + //筛选用户信息 排除前8位 + List list1 = list2.subList(8, list2.size()); + int random = (int)(Math.random() * list1.size()); + if (!hashMap.containsKey(random)) { + hashMap.put(random, ""); + newList.add(list1.get(random).getNickname()); + } + } + }else if(list2.size() > 1){ + //用户数量小于8 第1名不显示,其他正常显示 + List nickname = list2.subList(1, list2.size()); + for (UserWorks userWorks : nickname) { + newList.add(userWorks.getNickname()); + } + } + HashMap map = new HashMap<>(); map.put("data",list); map.put("Total",list.size()); map.put("userWork",userWork); + map.put("newList",newList); return R.ok(map); } @@ -146,12 +186,12 @@ public class RankingController { * @return */ @GetMapping("/getUserRank") - public R getUserRank(HttpServletRequest request,String openid){ - /*String openid = getValue(request.getCookies(), "openid"); + public R getUserRank(HttpServletRequest request){ + String openid = getValue(request.getCookies(), "openid"); if("prod".equals(activeProfiles) && StringUtils.isBlank(openid)){ log.error("openid为空,请求参数"); return R.error("openid不能为空"); - }*/ + } HashMap map = new HashMap<>(); UserWorks userWorks = userService.getUserWorks(openid); if(userWorks!=null){ @@ -174,12 +214,12 @@ public class RankingController { * @return */ @GetMapping("/getUserRanking") - public R getUserRanking(HttpServletRequest request,Integer worksId,String openid){ - /*String openid = getValue(request.getCookies(), "openid"); + public R getUserRanking(HttpServletRequest request,Integer worksId){ + String openid = getValue(request.getCookies(), "openid"); if("prod".equals(activeProfiles) && StringUtils.isBlank(openid)){ log.error("openid为空,请求参数"); return R.error("openid不能为空"); - }*/ + } //根据作品获取用户openid String openid2 = userService.getWorksUser(worksId); //获取用户作品信息 @@ -216,19 +256,19 @@ public class RankingController { * @return */ @GetMapping("/getRandom") - public R getRandom(HttpServletRequest request,String openid){ - /*String openid = getValue(request.getCookies(), "openid"); + public R getRandom(HttpServletRequest request){ + String openid = getValue(request.getCookies(), "openid"); if("prod".equals(activeProfiles) && StringUtils.isBlank(openid)){ log.error("openid为空,请求参数"); return R.error("openid不能为空"); - }*/ + } //获取作品id UserWorks userWorks = (UserWorks) redisUtil.get(USERINFO + openid); if(userWorks == null){ userWorks = userService.getUserWorks(openid); } int max=98; - int min=94; + int min=90; int i = new SecureRandom().nextInt(max) % (max - min + 1) + min; HashMap map = new HashMap<>(); if(userWorks!=null){ diff --git a/src/main/java/com/szxgl/pars2021/controller/VerificationCodeController.java b/src/main/java/com/szxgl/pars2021/controller/VerificationCodeController.java index b1ba732..cd643e0 100644 --- a/src/main/java/com/szxgl/pars2021/controller/VerificationCodeController.java +++ b/src/main/java/com/szxgl/pars2021/controller/VerificationCodeController.java @@ -33,11 +33,11 @@ public class VerificationCodeController { * @desc 图形验证码生成 */ @RequestMapping("/createImg") - public void createImg(HttpServletRequest request, HttpServletResponse response,String openid) throws Exception { - /*String openid = getValue(request.getCookies(), "openid"); + public void createImg(HttpServletRequest request, HttpServletResponse response) throws Exception { + String openid = getValue(request.getCookies(), "openid"); if("prod".equals(activeProfiles) && StringUtils.isBlank(openid)){ log.error("openid为空,请求参数"); - }*/ + } try { response.setContentType("image/jpeg");//设置相应类型,告诉浏览器输出的内容为图片 response.setHeader("Pragma", "No-cache");//设置响应头信息,告诉浏览器不要缓存此内容 diff --git a/src/main/java/com/szxgl/pars2021/controller/WechatController.java b/src/main/java/com/szxgl/pars2021/controller/WechatController.java index 7e04736..9131380 100644 --- a/src/main/java/com/szxgl/pars2021/controller/WechatController.java +++ b/src/main/java/com/szxgl/pars2021/controller/WechatController.java @@ -117,15 +117,15 @@ public class WechatController { * @return */ @GetMapping("/getUserInfo") - public R getUserInfo(HttpServletRequest request,String openid){ - /*String openid = getValue(request.getCookies(), "openid"); + public R getUserInfo(HttpServletRequest request){ + String openid = getValue(request.getCookies(), "openid"); if("prod".equals(activeProfiles) && StringUtils.isBlank(openid)){ log.error("openid为空,请求参数"); return R.error("openid不能为空"); - }*/ + } UserDO userDO = userService.getUserInfo(openid); Map map = new HashMap<>(); - if(!StringUtils.isNoneBlank(userDO.getRealname()) || !StringUtils.isNoneBlank(userDO.getPhone())) { + if(userDO == null || !StringUtils.isNoneBlank(userDO.getRealname()) || !StringUtils.isNoneBlank(userDO.getPhone())) { //用户未绑定手机号和填写真实姓名 map.put("result",false); }else { @@ -143,12 +143,12 @@ public class WechatController { * @return */ @PostMapping("/saveUserInfo") - public R saveUserInfo(HttpServletRequest request,UserDO userDO,String code,String openid){ - /*String openid = getValue(request.getCookies(), "openid"); + public R saveUserInfo(HttpServletRequest request,UserDO userDO,String code){ + String openid = getValue(request.getCookies(), "openid"); if("prod".equals(activeProfiles) && StringUtils.isBlank(openid)){ log.error("openid为空,请求参数"); return R.error("openid不能为空"); - }*/ + } if(!StringUtils.isNoneBlank(userDO.getRealname()) || !StringUtils.isNoneBlank(userDO.getPhone())){ log.error("真实姓名和手机号的参数不能为空!"); return R.error("真实姓名和手机号的参数不能为空!"); diff --git a/src/main/java/com/szxgl/pars2021/controller/WorksController.java b/src/main/java/com/szxgl/pars2021/controller/WorksController.java index 142be61..433c976 100644 --- a/src/main/java/com/szxgl/pars2021/controller/WorksController.java +++ b/src/main/java/com/szxgl/pars2021/controller/WorksController.java @@ -61,19 +61,29 @@ public class WorksController { * @return */ @PostMapping("/saveWorks") - public R saveWorks(MultipartFile file, HttpServletRequest request,String openid){ - /*String openid = getValue(request.getCookies(), "openid"); + public R saveWorks(MultipartFile file, HttpServletRequest request){ + String openid = getValue(request.getCookies(), "openid"); if("prod".equals(activeProfiles) && StringUtils.isBlank(openid)){ log.error("openid为空,请求参数"); return R.error("openid不能为空"); - }*/ + } UserDO userDO = userService.get(openid); - if(!StringUtils.isNoneBlank(userDO.getRealname()) || !StringUtils.isNoneBlank(userDO.getPhone())){ + if(userDO == null || !StringUtils.isNoneBlank(userDO.getRealname()) || !StringUtils.isNoneBlank(userDO.getPhone())){ log.error("请先填写真实姓名和手机号!"); return R.error("请先填写真实姓名和手机号!"); } + if(!StringUtils.isNoneBlank(file.getOriginalFilename())){ + log.error("上传文件不能为空!"); + return R.error("上传文件不能为空!"); + } + if(!"image/jpg".contains(file.getContentType()) && !"image/png".contains(file.getContentType()) && !"image/jpeg".contains(file.getContentType())){ + System.out.println(file.getContentType()); + log.error("文件格式不正确!"); + return R.error("文件格式不正确!"); + } + //查询用户是否已拥有作品 WorksDao work = worksService.getWorks(openid); if( work != null ){ @@ -81,11 +91,11 @@ public class WorksController { return R.error("您已经上传过作品,请勿重复上传!"); } - - try { //上传文件到oss上 - R r = UploadFileToOssUtil.uploadFileToOss(file.getInputStream(), Objects.requireNonNull(file.getOriginalFilename())); + String contentType = file.getContentType(); + String fileUrl = Objects.requireNonNull(file.getOriginalFilename())+"."+contentType.substring(contentType.lastIndexOf("/")+1); + R r = UploadFileToOssUtil.uploadFileToOss(file.getInputStream(), fileUrl); if("-1".equals(r.get("ret"))){ log.error("文件上传失败!"); return R.error("文件上传失败!"); @@ -117,12 +127,12 @@ public class WorksController { * @return */ @GetMapping("/getUploadFile") - public R getUploadFile(HttpServletRequest request,String openid){ - /*String openid = getValue(request.getCookies(), "openid"); + public R getUploadFile(HttpServletRequest request){ + String openid = getValue(request.getCookies(), "openid"); if("prod".equals(activeProfiles) && StringUtils.isBlank(openid)){ log.error("openid为空,请求参数"); return R.error("openid不能为空"); - }*/ + } WorksDao works = worksService.getWorks(openid); HashMap map = new HashMap<>(); if(works == null){ diff --git a/src/main/java/com/szxgl/pars2021/filter/WebAuthFilter.java b/src/main/java/com/szxgl/pars2021/filter/WebAuthFilter.java index df2d627..78e7bcd 100644 --- a/src/main/java/com/szxgl/pars2021/filter/WebAuthFilter.java +++ b/src/main/java/com/szxgl/pars2021/filter/WebAuthFilter.java @@ -1,29 +1,49 @@ package com.szxgl.pars2021.filter; +import com.alibaba.fastjson.JSONObject; +import com.szxgl.pars2021.entity.WxMpUser; +import com.szxgl.pars2021.service.UserService; +import com.szxgl.pars2021.utils.URIUtil; +import com.szxgl.pars2021.utils.Utility; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.ApplicationContext; +import org.springframework.stereotype.Component; +import org.springframework.web.context.support.WebApplicationContextUtils; + +import javax.servlet.*; +import javax.servlet.annotation.WebFilter; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.*; +import java.net.HttpURLConnection; +import java.net.URL; + /** * 授权测试 * @author leiyun * @datetime 2017年4月27日 下午4:05:24 */ -/*@WebFilter("*.html") -@Component +@WebFilter("*.html") @Slf4j public class WebAuthFilter implements Filter { - @Value("${wx.appid}") - private String default_appid; + //@Value("${wx.appid}") + private String default_appid = "wx35766a64d73d08a9"; - @Value("${wx.auth-code}") - private String key; + //@Value("${wx.auth-code}") + private String key = "1a9caed163104e2e9056c58b989347b9"; - @Value("${wx.project-id}") - private String projectId; + //@Value("${wx.project-id}") + private String projectId = "20202000200020002"; - @Value("${wx.auth-scope}") - private String default_scope; + //@Value("${wx.auth-scope}") + private String default_scope = "snsapi_userinfo"; - @Value("${wx.api-domain}") - private String api_domain; + //@Value("${wx.api-domain}") + private String api_domain = "https://wx.xfhd.net/thirdparty"; // private static String default_appid = "wx35766a64d73d08a9"; // private static String key = "adsagdagefghfhgffsghdfsgd"; @@ -50,6 +70,12 @@ public class WebAuthFilter implements Filter { return; } + log.info("default_appid:"+default_appid); + log.info("key:"+key); + log.info("projectId:"+projectId); + log.info("default_scope:"+default_scope); + log.info("api_domain:"+api_domain); + // Mozilla/5.0 (Linux; Android 4.4.4; iToolsVM Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/33.0.0.0 Mobile Safari/537.36 MicroMessenger/6.3.31.940 NetType/WIFI Language/zh_CN // 每次授权成功后发现会有重复的请求进来,IP为微信上海服务器的IP,useragent包含iToolsVM,暂不明原因,所以直接过滤掉 @@ -154,4 +180,4 @@ public class WebAuthFilter implements Filter { return jsonObject; } -}*/ +} diff --git a/src/main/java/com/szxgl/pars2021/service/impl/UserServiceImpl.java b/src/main/java/com/szxgl/pars2021/service/impl/UserServiceImpl.java index b74fca9..3d53701 100644 --- a/src/main/java/com/szxgl/pars2021/service/impl/UserServiceImpl.java +++ b/src/main/java/com/szxgl/pars2021/service/impl/UserServiceImpl.java @@ -39,6 +39,7 @@ public class UserServiceImpl implements UserService { userDO1.setNickname(wxMpUser.getNickname()); userDO1.setHeadimgurl(wxMpUser.getHeadimgurl()); userDO1.setCreateTime(new Date()); + userDO1.setUpdateTime(new Date()); userMapper.insert(userDO1); } } diff --git a/src/main/java/com/szxgl/pars2021/utils/UploadFileToOssUtil.java b/src/main/java/com/szxgl/pars2021/utils/UploadFileToOssUtil.java index b9f70c1..9c8f254 100644 --- a/src/main/java/com/szxgl/pars2021/utils/UploadFileToOssUtil.java +++ b/src/main/java/com/szxgl/pars2021/utils/UploadFileToOssUtil.java @@ -4,12 +4,13 @@ import com.aliyun.oss.OSS; import com.aliyun.oss.OSSClientBuilder; import com.aliyun.oss.common.comm.ResponseMessage; import com.aliyun.oss.model.PutObjectResult; +import lombok.extern.slf4j.Slf4j; import java.io.InputStream; import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.UUID; +import java.util.*; +@Slf4j public class UploadFileToOssUtil { /** @@ -42,7 +43,6 @@ public class UploadFileToOssUtil { */ public static R uploadFileToOss(InputStream inputStream, String originalName) { - // 创建OSSClient实例。 OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); @@ -63,7 +63,7 @@ public class UploadFileToOssUtil { //使用目录、文件主体名称、文件扩展名称拼接得到对象名称 (普通输入路径) String objectName = "h5-upload/"+folderName + "/" + fileMainName + extensionName; - + log.info("输入路径:"+objectName); System.out.println(objectName); try { @@ -121,4 +121,33 @@ public class UploadFileToOssUtil { String msg = r.get("msg").toString(); }*/ + public static void main(String[] args) { + /* List list = new ArrayList(); + List news = new ArrayList(); + Map hashMap = new HashMap(); + for (int i = 0; i < 20; i++) { + list.add(i); + } + System.out.println(list); + int size = 0; + if(list.size() > 8 ){ + size = list.subList(8, list.size()).size(); + while (hashMap.size() < size) { + List list1 = list.subList(8, list.size()); + int random = (int)(Math.random() * list1.size()); + if (!hashMap.containsKey(random)) { + hashMap.put(random, ""); + news.add(list1.get(random)); + } + } + }else if(list.size() > 1){ + List nickname = list.subList(1, list.size()); + news.addAll(nickname); + } + System.out.println(news);*/ + String name = "image/jpeg"; + System.out.println(name.substring(name.lastIndexOf("/")+1)); + + } + } diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 6d51c87..ea54598 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -2,6 +2,7 @@ server: port: 8616 servlet: context-path: /pars-h5-2021 + max-http-header-size: 65546 spring: # # 允许预检请求 # mvc: @@ -20,6 +21,7 @@ spring: + #mybatis mybatis-plus: mapper-locations: classpath*:/mapper/**/*.xml