From ef6a196b453f4347a2f4d52a4712a07ddc37c25b Mon Sep 17 00:00:00 2001 From: nili Date: Wed, 13 Mar 2024 15:06:01 +0800 Subject: [PATCH] =?UTF-8?q?matrix=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../group/game/dao/bean/MatrixAdvRecord.java | 23 +++++ .../dao/mapper/MatrixAdvRecordMapper.java | 11 +++ .../group/game/service/MatrixService.java | 34 ++++++++ .../game/service/bo/MatrixAdvRecordBo.java | 12 +++ .../java/awesome/group/RequestContext.java | 3 + .../group/controller/MatrixController.java | 25 ++++++ .../awesome/group/filter/LoginFilter.java | 85 +++++++++++++++++++ .../group/interceptor/InterceptorConfig.java | 29 ------- .../group/interceptor/JwtInterceptor.java | 45 ---------- .../main/resources/application-default.yml | 6 +- 10 files changed, 196 insertions(+), 77 deletions(-) create mode 100644 game-dao/src/main/java/awesome/group/game/dao/bean/MatrixAdvRecord.java create mode 100644 game-dao/src/main/java/awesome/group/game/dao/mapper/MatrixAdvRecordMapper.java create mode 100644 game-service/src/main/java/awesome/group/game/service/MatrixService.java create mode 100644 game-service/src/main/java/awesome/group/game/service/bo/MatrixAdvRecordBo.java create mode 100644 game-web/src/main/java/awesome/group/controller/MatrixController.java create mode 100644 game-web/src/main/java/awesome/group/filter/LoginFilter.java delete mode 100644 game-web/src/main/java/awesome/group/interceptor/InterceptorConfig.java delete mode 100644 game-web/src/main/java/awesome/group/interceptor/JwtInterceptor.java diff --git a/game-dao/src/main/java/awesome/group/game/dao/bean/MatrixAdvRecord.java b/game-dao/src/main/java/awesome/group/game/dao/bean/MatrixAdvRecord.java new file mode 100644 index 0000000..89ba480 --- /dev/null +++ b/game-dao/src/main/java/awesome/group/game/dao/bean/MatrixAdvRecord.java @@ -0,0 +1,23 @@ +package awesome.group.game.dao.bean; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; + +import java.sql.Timestamp; + +@Data +public class MatrixAdvRecord { + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + private String deviceId; + private Integer appId; + private Integer platform;//1穿山甲,2腾讯,3百度联盟,4 Mintegral,5 快手,6游可赢,7 Sigmob,8 Admob + private Integer advType;//1横幅,2插页,3激励视频 + private Integer ecpm;//单位:分 + private String deviceBrand; + private String deviceName; + private String ip; + private Timestamp createdAt; + +} diff --git a/game-dao/src/main/java/awesome/group/game/dao/mapper/MatrixAdvRecordMapper.java b/game-dao/src/main/java/awesome/group/game/dao/mapper/MatrixAdvRecordMapper.java new file mode 100644 index 0000000..d87551e --- /dev/null +++ b/game-dao/src/main/java/awesome/group/game/dao/mapper/MatrixAdvRecordMapper.java @@ -0,0 +1,11 @@ +package awesome.group.game.dao.mapper; + +import awesome.group.game.dao.bean.MatrixAdvRecord; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Select; + +public interface MatrixAdvRecordMapper extends BaseMapper { + + @Select("select id from matrix_app where code = #{code}") + Integer queryAppId(String code); +} diff --git a/game-service/src/main/java/awesome/group/game/service/MatrixService.java b/game-service/src/main/java/awesome/group/game/service/MatrixService.java new file mode 100644 index 0000000..ef513cb --- /dev/null +++ b/game-service/src/main/java/awesome/group/game/service/MatrixService.java @@ -0,0 +1,34 @@ +package awesome.group.game.service; + +import awesome.group.game.dao.bean.MatrixAdvRecord; +import awesome.group.game.dao.mapper.MatrixAdvRecordMapper; +import awesome.group.game.service.bo.MatrixAdvRecordBo; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; +import org.springframework.util.Assert; +import org.springframework.util.StringUtils; + +@Service +public class MatrixService { + + @Resource + private MatrixAdvRecordMapper mapper; + + public void saveRecord(MatrixAdvRecordBo bo) { + Assert.isTrue(StringUtils.hasText(bo.appCode), "appCode不能为空"); + Integer appId = mapper.queryAppId(bo.appCode); + if (appId == null) { + return;//非法请求,直接忽略 + } + MatrixAdvRecord record = new MatrixAdvRecord(); + record.setDeviceId(bo.deviceId); + record.setAppId(appId); + record.setPlatform(bo.platform); + record.setAdvType(bo.advType); + record.setEcpm(bo.ecpm); + record.setDeviceBrand(bo.deviceBrand); + record.setDeviceName(bo.deviceName); + record.setIp(bo.ip); + mapper.insert(record); + } +} diff --git a/game-service/src/main/java/awesome/group/game/service/bo/MatrixAdvRecordBo.java b/game-service/src/main/java/awesome/group/game/service/bo/MatrixAdvRecordBo.java new file mode 100644 index 0000000..58e25dc --- /dev/null +++ b/game-service/src/main/java/awesome/group/game/service/bo/MatrixAdvRecordBo.java @@ -0,0 +1,12 @@ +package awesome.group.game.service.bo; + +public class MatrixAdvRecordBo { + public String deviceId; + public String appCode; + public Integer platform;//1穿山甲,2腾讯,3百度联盟,4 Mintegral,5 快手,6游可赢,7 Sigmob,8 Admob + public Integer advType;//1横幅,2插页,3激励视频 + public Integer ecpm;//单位:分 + public String deviceBrand; + public String deviceName; + public String ip; +} diff --git a/game-web/src/main/java/awesome/group/RequestContext.java b/game-web/src/main/java/awesome/group/RequestContext.java index 4972330..175306d 100644 --- a/game-web/src/main/java/awesome/group/RequestContext.java +++ b/game-web/src/main/java/awesome/group/RequestContext.java @@ -43,5 +43,8 @@ public class RequestContext { return (Integer) THREAD_LOCAL.get().get(KEY_UID); } + public static void clear() { + THREAD_LOCAL.remove(); + } } diff --git a/game-web/src/main/java/awesome/group/controller/MatrixController.java b/game-web/src/main/java/awesome/group/controller/MatrixController.java new file mode 100644 index 0000000..4db863a --- /dev/null +++ b/game-web/src/main/java/awesome/group/controller/MatrixController.java @@ -0,0 +1,25 @@ +package awesome.group.controller; + +import awesome.group.aop.RestApi; +import awesome.group.game.service.MatrixService; +import awesome.group.game.service.bo.MatrixAdvRecordBo; +import awesome.group.game.service.common.response.R; +import jakarta.annotation.Resource; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/api/game/matrix") +public class MatrixController { + @Resource + private MatrixService matrixService; + + @PostMapping("/saveAdvRecord") + @RestApi + public R saveAdvRecord(@RequestBody MatrixAdvRecordBo bo) { + matrixService.saveRecord(bo); + return new R<>(R.CODE_SUCCESS, "ok", null); + } +} diff --git a/game-web/src/main/java/awesome/group/filter/LoginFilter.java b/game-web/src/main/java/awesome/group/filter/LoginFilter.java new file mode 100644 index 0000000..2844e54 --- /dev/null +++ b/game-web/src/main/java/awesome/group/filter/LoginFilter.java @@ -0,0 +1,85 @@ +package awesome.group.filter; + +import awesome.group.RequestContext; +import awesome.group.game.service.common.log.L; +import awesome.group.game.service.common.response.R; +import awesome.group.game.service.util.JwtUtils; +import com.auth0.jwt.exceptions.TokenExpiredException; +import com.google.gson.Gson; +import jakarta.servlet.*; +import jakarta.servlet.annotation.WebFilter; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import org.springframework.util.StringUtils; + +import java.io.IOException; +import java.util.List; + +/** + * @author nidaren + */ +@WebFilter(filterName = "ContextFilter", urlPatterns = {"/api/*"}) +public class LoginFilter implements Filter { + + + @Override + public void init(FilterConfig filterConfig) throws ServletException { + + } + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { + try { + HttpServletRequest httpRequest = (HttpServletRequest) request; + String token = httpRequest.getHeader("Authorization"); + List openApi = List.of( + "/api/game/user/demo", + "/api/game/app/info", + "/api/game/auth/login", + "/api/game/auth/loginV2", + "/api/game/auth/loginV3", + "/api/game/matrix/saveAdvRecord", + "/api/game/auth/test"); + boolean pass = false; + Integer userId = null; + try { + if (StringUtils.hasText(token)) { + userId = JwtUtils.parseToken(token); + pass = true; + } + } catch (TokenExpiredException e) { + //忽略 + } catch (Exception e) { + L.trace("parseTokenError", "token:" + token, e); + } + String path = httpRequest.getRequestURI().substring(httpRequest.getContextPath().length()).replaceAll("[/]+$", ""); + for (String s : openApi) { + if (path.startsWith(s)) { + pass = true; + } + } + if (pass) { + RequestContext.init(httpRequest, (HttpServletResponse) response, userId); + chain.doFilter(request, response); + } else { + authFail(response); + } + } finally { + RequestContext.clear(); + } + } + + private void authFail(ServletResponse response) throws IOException { + R res = new R<>(-88888, "not login ", null); + Gson gson = new Gson(); + response.setContentType("application/json;charset=UTF-8"); + response.setCharacterEncoding("UTF-8"); + response.getWriter().write(gson.toJson(res)); + response.getWriter().flush(); + } + + @Override + public void destroy() { + + } +} diff --git a/game-web/src/main/java/awesome/group/interceptor/InterceptorConfig.java b/game-web/src/main/java/awesome/group/interceptor/InterceptorConfig.java deleted file mode 100644 index 790f41e..0000000 --- a/game-web/src/main/java/awesome/group/interceptor/InterceptorConfig.java +++ /dev/null @@ -1,29 +0,0 @@ -package awesome.group.interceptor; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.web.servlet.config.annotation.InterceptorRegistry; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; - -@Configuration //配置类 -public class InterceptorConfig implements WebMvcConfigurer { - - - @Bean //手动注入 JwtInterceptor 对象 - public JwtInterceptor jwtInterceptor() { - return new JwtInterceptor(); - } - - @Override - public void addInterceptors(InterceptorRegistry registry) { - registry.addInterceptor(jwtInterceptor()) - //拦截的路径 - .addPathPatterns("/**") - //不拦截的路径 - .excludePathPatterns("/api/game/app/info") - .excludePathPatterns("/api/game/auth/login") - .excludePathPatterns("/api/game/auth/loginV2") - .excludePathPatterns("/api/game/auth/loginV3") - .excludePathPatterns("/api/game/auth/test"); - } -} diff --git a/game-web/src/main/java/awesome/group/interceptor/JwtInterceptor.java b/game-web/src/main/java/awesome/group/interceptor/JwtInterceptor.java deleted file mode 100644 index e445ea6..0000000 --- a/game-web/src/main/java/awesome/group/interceptor/JwtInterceptor.java +++ /dev/null @@ -1,45 +0,0 @@ -package awesome.group.interceptor; - -import awesome.group.RequestContext; -import awesome.group.game.service.common.log.L; -import awesome.group.game.service.common.response.R; -import awesome.group.game.service.util.JwtUtils; -import com.auth0.jwt.exceptions.TokenExpiredException; -import com.google.gson.Gson; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; -import org.springframework.util.StringUtils; -import org.springframework.web.servlet.HandlerInterceptor; - -import java.io.PrintWriter; -import java.util.List; - -public class JwtInterceptor implements HandlerInterceptor { - - @Override - public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { - String token = request.getHeader("Authorization"); - List openApi = List.of("/api/game/user/demo"); - try { - if (StringUtils.hasText(token)) { - Integer userId = JwtUtils.parseToken(token); - RequestContext.init(request, response, userId); - return true; - } - } catch (TokenExpiredException e) { - //忽略 - } catch (Exception e) { - L.trace("parseTokenError", "token:" + token, e); - } - String path = request.getRequestURI().substring(request.getContextPath().length()).replaceAll("[/]+$", ""); - for (String s : openApi) { - if (path.startsWith(s)) { - return true; - } - } - PrintWriter out = response.getWriter(); - Gson gson = new Gson(); - out.print(gson.toJson(new R<>(-88888, "not log in", null))); - return false; - } -} diff --git a/game-web/src/main/resources/application-default.yml b/game-web/src/main/resources/application-default.yml index 3339f1a..fcdf01f 100644 --- a/game-web/src/main/resources/application-default.yml +++ b/game-web/src/main/resources/application-default.yml @@ -12,9 +12,9 @@ spring: datasource: game: type: com.zaxxer.hikari.HikariDataSource - jdbcUrl: jdbc:mysql://47.108.240.181:3306/game?autoReconnect=true&useUnicode=true&characterEncoding=utf-8&connectTimeout=300&socketTimeout=2000&serverTimezone=Hongkong&zeroDateTimeBehavior=convertToNull - username: game - password: Vd12luSjmwAXuwDH + jdbcUrl: jdbc:mysql://127.0.0.1:3306/game?autoReconnect=true&useUnicode=true&characterEncoding=utf-8&connectTimeout=300&socketTimeout=2000&serverTimezone=Hongkong&zeroDateTimeBehavior=convertToNull + username: root + password: connectionTimeout: 300 maximumPoolSize: 5 minimumIdle: 1