nili
10 months ago
10 changed files with 196 additions and 77 deletions
@ -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; |
|||
|
|||
} |
@ -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<MatrixAdvRecord> { |
|||
|
|||
@Select("select id from matrix_app where code = #{code}") |
|||
Integer queryAppId(String code); |
|||
} |
@ -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); |
|||
} |
|||
} |
@ -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; |
|||
} |
@ -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<Void> saveAdvRecord(@RequestBody MatrixAdvRecordBo bo) { |
|||
matrixService.saveRecord(bo); |
|||
return new R<>(R.CODE_SUCCESS, "ok", null); |
|||
} |
|||
} |
@ -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<String> 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<String> 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() { |
|||
|
|||
} |
|||
} |
@ -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"); |
|||
} |
|||
} |
@ -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<String> 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; |
|||
} |
|||
} |
Loading…
Reference in new issue