Commit 1c48aa4f by lixiaozhong

策略模块的代码规范

parent c22b869b
...@@ -82,26 +82,27 @@ public class NettyApiRequest { ...@@ -82,26 +82,27 @@ public class NettyApiRequest {
private void initWs(ChannelHandlerContext ctx, FullHttpRequest httpRequest) throws Exception { private void initWs(ChannelHandlerContext ctx, FullHttpRequest httpRequest) throws Exception {
Map<String, String> paramMap = FullHttpRequestUtils.parameterParse(httpRequest); Map<String, String> paramMap = FullHttpRequestUtils.parameterParse(httpRequest);
String token = paramMap.get(WsConstants.TOKEN); String token = paramMap.get(WsConstants.TOKEN);
DecodedJWT jwtInfo = JwtUtil.getJwtInfo(token);
String payload = jwtInfo.getPayload();
Base64.Decoder decoder = Base64.getDecoder();
payload = new String(decoder.decode(payload), StandardCharsets.UTF_8);
JSONObject jsonObject = JSONObject.parseObject(payload);
String appKey = (String) jsonObject.get("appKey");
String clientId = (String) jsonObject.get(CommonConstant.CLIENT_ID);
if (StringUtils.isBlank(token)) { if (StringUtils.isBlank(token)) {
String context = new JsonMapper().writeValueAsString(ApiResult.result(ApiCode.FAIL, "token不能为空", (Object) null)); String context = new JsonMapper().writeValueAsString(ApiResult.result(ApiCode.FAIL, "token不能为空", (Object) null));
FullHttpRequestUtils.send(ctx, context, HttpResponseStatus.OK); FullHttpRequestUtils.send(ctx, context, HttpResponseStatus.OK);
return; return;
} }
if (JwtUtil.isExpired(token)) { if (JwtUtil.isExpired(token)) {
String context = new JsonMapper().writeValueAsString(ApiResult.result(ApiCode.FAIL, "JWT Token已过期,token", (Object) null)); String context = new JsonMapper().writeValueAsString(ApiResult.result(ApiCode.FAIL, "JWT Token已过期,token", (Object) null));
FullHttpRequestUtils.send(ctx, context, HttpResponseStatus.OK); FullHttpRequestUtils.send(ctx, context, HttpResponseStatus.OK);
return; return;
} }
DecodedJWT jwtInfo = JwtUtil.getJwtInfo(token);
String payload = jwtInfo.getPayload();
Base64.Decoder decoder = Base64.getDecoder();
payload = new String(decoder.decode(payload), StandardCharsets.UTF_8);
JSONObject jsonObject = JSONObject.parseObject(payload);
String appKey = (String) jsonObject.get(CommonConstant.APP_KEY);
String clientId = (String) jsonObject.get(CommonConstant.CLIENT_ID);
// 从redis获取jwt的token 验签token // 从redis获取jwt的token 验签token
JwtToken jwtToken = shiroLoginService.getJwtTokenForRedis(token); JwtToken jwtToken = shiroLoginService.getJwtTokenForRedis(token);
...@@ -113,9 +114,9 @@ public class NettyApiRequest { ...@@ -113,9 +114,9 @@ public class NettyApiRequest {
} }
if ((!jwtToken.getClientId().equals(clientId)) || (!jwtToken.getAppKey().equals(appKey))) { if ((!jwtToken.getClientId().equals(clientId)) || (!jwtToken.getAppKey().equals(appKey))) {
log.info("clientId appKey 不一致");
String context = new JsonMapper().writeValueAsString(ApiResult.result(ApiCode.FAIL, "clientId appKey 不一致", (Object) null)); String context = new JsonMapper().writeValueAsString(ApiResult.result(ApiCode.FAIL, "clientId appKey 不一致", (Object) null));
FullHttpRequestUtils.send(ctx, context, HttpResponseStatus.OK); FullHttpRequestUtils.send(ctx, context, HttpResponseStatus.OK);
log.info("clientId appKey 不一致");
return; return;
} }
......
...@@ -17,7 +17,7 @@ import java.lang.annotation.Target; ...@@ -17,7 +17,7 @@ import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)//RUNTIME运行时保留 @Retention(RetentionPolicy.RUNTIME)//RUNTIME运行时保留
@Target(ElementType.TYPE) //type描述类、接口 @Target(ElementType.TYPE) //type描述类、接口
@Documented @Documented
public @interface CmdTypeAnnotation { public @interface ImCmdType {
WsRequestCmdEnum type(); WsRequestCmdEnum type();
} }
...@@ -4,8 +4,8 @@ import com.fasterxml.jackson.databind.json.JsonMapper; ...@@ -4,8 +4,8 @@ import com.fasterxml.jackson.databind.json.JsonMapper;
import com.wecloud.im.ws.enums.WsRequestCmdEnum; import com.wecloud.im.ws.enums.WsRequestCmdEnum;
import com.wecloud.im.ws.model.request.ReceiveModel; import com.wecloud.im.ws.model.request.ReceiveModel;
import com.wecloud.im.ws.service.WriteDataService; import com.wecloud.im.ws.service.WriteDataService;
import com.wecloud.im.ws.strategy.AbstractImCmd; import com.wecloud.im.ws.strategy.AbstractImCmdStrategy;
import com.wecloud.im.ws.strategy.ImCmdContext; import com.wecloud.im.ws.strategy.ImCmdStrategyFactory;
import io.geekidea.springbootplus.framework.common.exception.BusinessException; import io.geekidea.springbootplus.framework.common.exception.BusinessException;
import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelHandlerContext;
import org.slf4j.Logger; import org.slf4j.Logger;
...@@ -24,7 +24,7 @@ public class ReadWsData { ...@@ -24,7 +24,7 @@ public class ReadWsData {
private static final Logger log = LoggerFactory.getLogger(ReadWsData.class); private static final Logger log = LoggerFactory.getLogger(ReadWsData.class);
@Resource @Resource
private ImCmdContext receiveStrategyContext; private ImCmdStrategyFactory receiveStrategyContext;
@Resource @Resource
private WriteDataService writeDataService; private WriteDataService writeDataService;
...@@ -51,7 +51,7 @@ public class ReadWsData { ...@@ -51,7 +51,7 @@ public class ReadWsData {
WsRequestCmdEnum wsRequestUriPathEnum = WsRequestCmdEnum.getByCode(receiveModel.getCmd()); WsRequestCmdEnum wsRequestUriPathEnum = WsRequestCmdEnum.getByCode(receiveModel.getCmd());
// 使用策略模式, 根据不同类型请求调用不同实现类 // 使用策略模式, 根据不同类型请求调用不同实现类
AbstractImCmd cmdStrategy = receiveStrategyContext.getStrategy(wsRequestUriPathEnum); AbstractImCmdStrategy cmdStrategy = receiveStrategyContext.getStrategy(wsRequestUriPathEnum);
cmdStrategy.process(receiveModel, ctx, data, appKey, clientId); cmdStrategy.process(receiveModel, ctx, data, appKey, clientId);
} }
......
...@@ -11,7 +11,7 @@ import io.netty.channel.ChannelHandlerContext; ...@@ -11,7 +11,7 @@ import io.netty.channel.ChannelHandlerContext;
* @Author hewei hwei1233@163.com * @Author hewei hwei1233@163.com
* @Date 2020-01-02 * @Date 2020-01-02
*/ */
public abstract class AbstractImCmd { public abstract class AbstractImCmdStrategy {
/** /**
* 处理业务流程 * 处理业务流程
...@@ -19,5 +19,5 @@ public abstract class AbstractImCmd { ...@@ -19,5 +19,5 @@ public abstract class AbstractImCmd {
* @param requestModel * @param requestModel
* @throws Exception * @throws Exception
*/ */
abstract public void process(ReceiveModel requestModel, ChannelHandlerContext ctx, String data, String appKey, String clientId) throws JsonProcessingException; public abstract void process(ReceiveModel requestModel, ChannelHandlerContext ctx, String data, String appKey, String clientId) throws JsonProcessingException;
} }
...@@ -11,15 +11,15 @@ import java.util.Map; ...@@ -11,15 +11,15 @@ import java.util.Map;
* 维护指令码与策略实现的对应 * 维护指令码与策略实现的对应
* @Author hewei hwei1233@163.com * @Author hewei hwei1233@163.com
*/ */
public class ImCmdContext { public class ImCmdStrategyFactory {
private final Map<WsRequestCmdEnum, Class> strategyMap; private final Map<WsRequestCmdEnum, Class> strategyMap;
public ImCmdContext(Map<WsRequestCmdEnum, Class> strategyMap) { public ImCmdStrategyFactory(Map<WsRequestCmdEnum, Class> strategyMap) {
this.strategyMap = strategyMap; this.strategyMap = strategyMap;
} }
public AbstractImCmd getStrategy(WsRequestCmdEnum wsRequestPathEnum) { public AbstractImCmdStrategy getStrategy(WsRequestCmdEnum wsRequestPathEnum) {
if (wsRequestPathEnum == null) { if (wsRequestPathEnum == null) {
throw new IllegalArgumentException("not fond enum"); throw new IllegalArgumentException("not fond enum");
...@@ -35,6 +35,6 @@ public class ImCmdContext { ...@@ -35,6 +35,6 @@ public class ImCmdContext {
throw new IllegalArgumentException("not fond strategy for type:" + wsRequestPathEnum.getCmdCode()); throw new IllegalArgumentException("not fond strategy for type:" + wsRequestPathEnum.getCmdCode());
} }
return (AbstractImCmd) SpringBeanUtils.getBean(aClass); return (AbstractImCmdStrategy) SpringBeanUtils.getBean(aClass);
} }
} }
package com.wecloud.im.ws.strategy; package com.wecloud.im.ws.strategy;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import com.wecloud.im.ws.annotation.CmdTypeAnnotation; import com.wecloud.im.ws.annotation.ImCmdType;
import com.wecloud.im.ws.enums.WsRequestCmdEnum; import com.wecloud.im.ws.enums.WsRequestCmdEnum;
import com.wecloud.im.ws.utils.ClassScanner; import com.wecloud.im.ws.utils.ClassScanner;
import org.springframework.beans.BeansException; import org.springframework.beans.BeansException;
...@@ -25,27 +25,27 @@ import java.util.Set; ...@@ -25,27 +25,27 @@ import java.util.Set;
public class ImCmdStrategyProcessor implements BeanFactoryPostProcessor { public class ImCmdStrategyProcessor implements BeanFactoryPostProcessor {
// 扫码注解的包路径 // 扫码注解的包路径
private static final String STRATEGY_PACK = "com.wecloud.im.ws.strategy.concrete"; // private static final String STRATEGY_PACK = "com.wecloud.im.ws.strategy.concrete";
@Override @Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException { public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException {
Map<WsRequestCmdEnum, Class> handlerMap = Maps.newHashMapWithExpectedSize(5); Map<WsRequestCmdEnum, Class> handlerMap = Maps.newHashMapWithExpectedSize(5);
// 扫码ReceiveTypeAnnotation注解的类 // 扫码ReceiveTypeAnnotation注解的类
Set<Class<?>> classSet = ClassScanner.scan(STRATEGY_PACK, CmdTypeAnnotation.class); Set<Class<?>> classSet = ClassScanner.scan(ImCmdStrategyProcessor.class.getPackage().getName(), ImCmdType.class);
classSet.forEach(clazz -> { classSet.forEach(clazz -> {
// 获取注解中的类型值,与枚举类一一对应 // 获取注解中的类型值,与枚举类一一对应
WsRequestCmdEnum type = clazz.getAnnotation(CmdTypeAnnotation.class).type(); WsRequestCmdEnum type = clazz.getAnnotation(ImCmdType.class).type();
handlerMap.put(type, clazz); handlerMap.put(type, clazz);
}); });
// 初始化Contenxt, 将其注册到spring容器当中 // 初始化Contenxt, 将其注册到spring容器当中
ImCmdContext context = new ImCmdContext(handlerMap); ImCmdStrategyFactory context = new ImCmdStrategyFactory(handlerMap);
try { try {
configurableListableBeanFactory.registerResolvableDependency(Class.forName(ImCmdContext.class.getName()), context); configurableListableBeanFactory.registerResolvableDependency(Class.forName(ImCmdStrategyFactory.class.getName()), context);
} catch (ClassNotFoundException e) { } catch (ClassNotFoundException e) {
e.printStackTrace(); e.printStackTrace();
} }
......
...@@ -15,14 +15,14 @@ import com.wecloud.im.service.ImClientService; ...@@ -15,14 +15,14 @@ import com.wecloud.im.service.ImClientService;
import com.wecloud.im.service.ImConversationMembersService; import com.wecloud.im.service.ImConversationMembersService;
import com.wecloud.im.service.ImInboxService; import com.wecloud.im.service.ImInboxService;
import com.wecloud.im.service.ImMessageService; import com.wecloud.im.service.ImMessageService;
import com.wecloud.im.ws.annotation.CmdTypeAnnotation; import com.wecloud.im.ws.annotation.ImCmdType;
import com.wecloud.im.ws.enums.WsRequestCmdEnum; import com.wecloud.im.ws.enums.WsRequestCmdEnum;
import com.wecloud.im.ws.enums.WsResponseCmdEnum; import com.wecloud.im.ws.enums.WsResponseCmdEnum;
import com.wecloud.im.ws.model.WsResponseModel; import com.wecloud.im.ws.model.WsResponseModel;
import com.wecloud.im.ws.model.request.ReceiveModel; import com.wecloud.im.ws.model.request.ReceiveModel;
import com.wecloud.im.ws.sender.PushTask; import com.wecloud.im.ws.sender.PushTask;
import com.wecloud.im.ws.service.WriteDataService; import com.wecloud.im.ws.service.WriteDataService;
import com.wecloud.im.ws.strategy.AbstractImCmd; import com.wecloud.im.ws.strategy.AbstractImCmdStrategy;
import io.geekidea.springbootplus.framework.common.api.ApiCode; import io.geekidea.springbootplus.framework.common.api.ApiCode;
import io.geekidea.springbootplus.framework.common.api.ApiResult; import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.geekidea.springbootplus.framework.shiro.util.SnowflakeUtil; import io.geekidea.springbootplus.framework.shiro.util.SnowflakeUtil;
...@@ -40,10 +40,10 @@ import java.util.List; ...@@ -40,10 +40,10 @@ import java.util.List;
/** /**
* @Description 处理app数据消息 * @Description 处理app数据消息
*/ */
@CmdTypeAnnotation(type = WsRequestCmdEnum.DATA) @ImCmdType(type = WsRequestCmdEnum.DATA)
@Service @Service
@Slf4j @Slf4j
public class ImChatConcrete extends AbstractImCmd { public class NormalChatStrategy extends AbstractImCmdStrategy {
public static final String PUSH_KEY = "push"; public static final String PUSH_KEY = "push";
public static final String MSG_ID = "msgId"; public static final String MSG_ID = "msgId";
......
...@@ -8,12 +8,12 @@ ...@@ -8,12 +8,12 @@
//import com.wecloud.im.service.ImConversationMembersService; //import com.wecloud.im.service.ImConversationMembersService;
//import com.wecloud.im.service.ImInboxService; //import com.wecloud.im.service.ImInboxService;
//import com.wecloud.im.service.ImMessageService; //import com.wecloud.im.service.ImMessageService;
//import com.wecloud.im.ws.annotation.CmdTypeAnnotation; //import com.wecloud.im.ws.annotation.ImCmdType;
//import com.wecloud.im.ws.enums.WsRequestCmdEnum; //import com.wecloud.im.ws.enums.WsRequestCmdEnum;
//import com.wecloud.im.ws.model.request.ReceiveModel; //import com.wecloud.im.ws.model.request.ReceiveModel;
//import com.wecloud.im.ws.sender.PushTask; //import com.wecloud.im.ws.sender.PushTask;
//import com.wecloud.im.ws.service.WriteDataService; //import com.wecloud.im.ws.service.WriteDataService;
//import com.wecloud.im.ws.strategy.ImCmdAbstract; //import com.wecloud.im.ws.strategy.AbstractImCmdStrategy;
//import com.wecloud.rtc.entity.RtcSubCmd; //import com.wecloud.rtc.entity.RtcSubCmd;
//import io.netty.channel.ChannelHandlerContext; //import io.netty.channel.ChannelHandlerContext;
//import lombok.extern.slf4j.Slf4j; //import lombok.extern.slf4j.Slf4j;
...@@ -23,10 +23,10 @@ ...@@ -23,10 +23,10 @@
///** ///**
// * 处理RTC信令消息 // * 处理RTC信令消息
// */ // */
//@CmdTypeAnnotation(type = WsRequestCmdEnum.SINGLE_RTC) //@ImCmdType(type = WsRequestCmdEnum.SINGLE_RTC)
//@Service //@Service
//@Slf4j //@Slf4j
//public class SingleRtcConcrete extends ImCmdAbstract { //public class SingleRtcStrategy extends AbstractImCmdStrategy {
// //
// //
// private static final JsonMapper JSON_MAPPER = new JsonMapper(); // private static final JsonMapper JSON_MAPPER = new JsonMapper();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment