Commit f688e8ee by giaogiao

生成token

parent 03f43c6f
......@@ -9,6 +9,9 @@ import org.springframework.stereotype.Component;
import javax.annotation.Resource;
/**
* netty随springboot项目启动而启动
*/
@Component
@Order(value = 1)//这里表示启动顺序
public class StartNettyService implements CommandLineRunner {
......@@ -21,7 +24,6 @@ public class StartNettyService implements CommandLineRunner {
@Override
@Async//注意这里,组件启动时会执行run,这个注解是让线程异步执行,这样不影响主线程
public void run(String... args) throws Exception {
nettyServer.run(port);
}
}
package io.geekidea.springbootplus.test;
import cn.hutool.core.lang.Snowflake;
import cn.hutool.crypto.digest.MD5;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.wecloud.im.entity.ImApplication;
import com.wecloud.im.entity.ImClient;
import com.wecloud.im.service.ImApplicationService;
import com.wecloud.im.service.ImClientService;
import com.wecloud.im.tillo.app_ws.utils.RedisUtils;
import io.geekidea.springbootplus.framework.shiro.util.JwtUtil;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.time.Duration;
/**
* 生成测试appkey与appSecret对,并存入数据库
*/
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public class LoginTest {
@Autowired
private RedisUtils redisUtils;
@Autowired
private StringRedisTemplate redisTemplate;
@Autowired
private ImApplicationService imApplicationService;
@Autowired
private ImClientService imClientService;
private String getToken(String timestemp, String clientId, String appKey, String sign) throws Exception {
String token = null;
// 从数据库查询密钥
ImApplication imApplication = imApplicationService.getOne(
new QueryWrapper<ImApplication>().lambda().eq(ImApplication::getAppKey, appKey)
);
// 验证签名
String mySign = new MD5().digestHex(timestemp + clientId + imApplication.getAppKey() + imApplication.getAppSecret());
if (mySign.equals(sign)) {
System.out.println("一致" + mySign);
} else {
System.out.println("不一致" + mySign);
}
// 判断client是否存在
ImClient byid = imClientService.getOne(new QueryWrapper<ImClient>().lambda()
.eq(ImClient::getFkAppid, imApplication.getId())
.eq(ImClient::getClientId, clientId));
if (byid == null) {
System.out.println("不存在");
ImClient imClient = new ImClient();
imClient.setId(new Snowflake(1L, 1L).nextId());
imClient.setFkAppid(imApplication.getId());
imClient.setClientId(clientId);
imClientService.save(imClient);
} else {
System.out.println("存在");
}
String generateToken = JwtUtil.generateToken(clientId, imApplication.getAppSecret(), Duration.ofDays(100));
redisTemplate.opsForValue().set("client:" + imApplication.getAppKey() + ":" + clientId, generateToken);
return generateToken;
}
@Test
public void test() throws Exception {
// 时间戳
String timestemp = "1619574452548";
String clientId = "c1";
String appKey = "elLwpel1gWCHDqZy";
String sign = "b240f069db255eaa0ab4677016c86f71";
String token = getToken(timestemp, clientId, appKey, sign);
System.out.println("token:" + token);
}
}
package io.geekidea.springbootplus.test;
import cn.hutool.crypto.digest.MD5;
import java.util.Date;
/**
* 生成测试appkey与appSecret对,并存入数据库
*/
//@RunWith(SpringJUnit4ClassRunner.class)
//@SpringBootTest
public class SignTest {
// @Autowired
// private ImClientService imClientService;
/**
* 获取sign,客户端sdk得到sign之后就可以进行登录 和开启websocket
* <p>
* sign = MD5{ clientId + AppKey + appSecret}
*
* @param AppKey
* @param appSecret
*/
private static void getSign(String timestemp, String clientId, String AppKey, String appSecret) {
String sign = new MD5().digestHex(timestemp + clientId + AppKey + appSecret);
System.out.println("timestemp:" + timestemp);
System.out.println("sign:" + sign);
}
public static void main(String[] args) {
String clientId = "c1";
String appKey = "elLwpel1gWCHDqZy";
String appSecret = "68809bb5a9077a83631aeb0b17b5965d6b2302faf2ab3737";
String timestemp = String.valueOf(new Date().getTime());
getSign(timestemp, clientId, appKey, appSecret);
}
}
package io.geekidea.springbootplus.test;
import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest;
import com.github.binarywang.wxpay.exception.WxPayException;
import com.github.binarywang.wxpay.service.WxPayService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
/**
* 微信支付测试
*/
@RunWith(SpringRunner.class)
@SpringBootTest
public class WxPayTest {
@Autowired
private WxPayService wxService;
/**
* 调用统一下单接口,并组装生成支付所需参数对象.
*
* @param request 统一下单请求参数
* @param <T> 请使用{@link com.github.binarywang.wxpay.bean.order}包下的类
* @return 返回 {@link com.github.binarywang.wxpay.bean.order}包下的类对象
*/
// @ApiOperation(value = "统一下单,并组装所需支付参数")
// @PostMapping("/createOrder")
public <T> T createOrder(WxPayUnifiedOrderRequest request) throws WxPayException {
return this.wxService.createOrder(request);
}
@Test
public void order() {
WxPayUnifiedOrderRequest wxPayUnifiedOrderRequest = new WxPayUnifiedOrderRequest();
wxPayUnifiedOrderRequest.setBody("会员充值");
// 商户系统内部的订单号,32个字符内、可包含字母, 其他说明见商户订单号
wxPayUnifiedOrderRequest.setOutTradeNo("00001");
//订单总金额,单位为分,详见支付金额
wxPayUnifiedOrderRequest.setTotalFee(1);
// APP和网页支付提交用户端ip
wxPayUnifiedOrderRequest.setSpbillCreateIp("111.111.222.33");
// 接收微信支付异步通知回调地址,通知url必须为直接可访问的url,不能携带参数。
wxPayUnifiedOrderRequest.setNotifyUrl("http");
wxPayUnifiedOrderRequest.setOpenid("ogXcu56o2ZYi-MgLRkSklKbe-PdU");
wxPayUnifiedOrderRequest.setTradeType("JSAPI");
Object order=null;
try {
order = createOrder(wxPayUnifiedOrderRequest);
} catch (WxPayException e) {
e.printStackTrace();
}
int i =1;
}
}
package com.wecloud.im.controller;
import com.wecloud.im.entity.ImClient;
import com.wecloud.im.param.ImClientPageParam;
import com.wecloud.im.param.ImClientQueryVo;
import com.wecloud.im.service.ImClientService;
import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.geekidea.springbootplus.framework.common.controller.BaseController;
import io.geekidea.springbootplus.framework.core.pagination.Paging;
import io.geekidea.springbootplus.framework.core.validator.groups.Add;
import io.geekidea.springbootplus.framework.core.validator.groups.Update;
import io.geekidea.springbootplus.framework.log.annotation.OperationLog;
import io.geekidea.springbootplus.framework.log.enums.OperationLogType;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
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;
/**
* 终端表 控制器
*
* @author wei
* @since 2021-04-27
*/
@Slf4j
@RestController
@RequestMapping("/imClient")
@Api(value = "终端表API", tags = {"终端表"})
public class ImClientController extends BaseController {
@Autowired
private ImClientService imClientService;
/**
* 添加终端表
*/
@PostMapping("/add")
@OperationLog(name = "添加终端表", type = OperationLogType.ADD)
@ApiOperation(value = "添加终端表")
public ApiResult<Boolean> addImClient(@Validated(Add.class) @RequestBody ImClient imClient) throws Exception {
boolean flag = imClientService.saveImClient(imClient);
return ApiResult.result(flag);
}
/**
* 修改终端表
*/
@PostMapping("/update")
@OperationLog(name = "修改终端表", type = OperationLogType.UPDATE)
@ApiOperation(value = "修改终端表")
public ApiResult<Boolean> updateImClient(@Validated(Update.class) @RequestBody ImClient imClient) throws Exception {
boolean flag = imClientService.updateImClient(imClient);
return ApiResult.result(flag);
}
/**
* 删除终端表
*/
@PostMapping("/delete/{id}")
@OperationLog(name = "删除终端表", type = OperationLogType.DELETE)
@ApiOperation(value = "删除终端表")
public ApiResult<Boolean> deleteImClient(@PathVariable("id") Long id) throws Exception {
boolean flag = imClientService.deleteImClient(id);
return ApiResult.result(flag);
}
/**
* 获取终端表详情
*/
@GetMapping("/info/{id}")
@OperationLog(name = "终端表详情", type = OperationLogType.INFO)
@ApiOperation(value = "终端表详情")
public ApiResult<ImClientQueryVo> getImClient(@PathVariable("id") Long id) throws Exception {
ImClientQueryVo imClientQueryVo = imClientService.getImClientById(id);
return ApiResult.ok(imClientQueryVo);
}
/**
* 终端表分页列表
*/
@PostMapping("/getPageList")
@OperationLog(name = "终端表分页列表", type = OperationLogType.PAGE)
@ApiOperation(value = "终端表分页列表")
public ApiResult<Paging<ImClientQueryVo>> getImClientPageList(@Validated @RequestBody ImClientPageParam imClientPageParam) throws Exception {
Paging<ImClientQueryVo> paging = imClientService.getImClientPageList(imClientPageParam);
return ApiResult.ok(paging);
}
}
package com.wecloud.im.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import io.geekidea.springbootplus.framework.common.entity.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotNull;
import java.util.Date;
/**
* 终端表
*
* @author wei
* @since 2021-04-27
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "ImClient对象")
public class ImClient extends BaseEntity {
private static final long serialVersionUID = 1L;
@NotNull(message = "客户端id不能为空")
@ApiModelProperty("客户端id")
@TableId(value = "id", type = IdType.INPUT)
private Long id;
@ApiModelProperty("创建时间")
private Date createTime;
@ApiModelProperty("修改时间")
private Date updateTime;
@ApiModelProperty("应用appid")
private Long fkAppid;
@ApiModelProperty("可选 自定义属性,供开发者扩展使用。")
private String attributes;
@ApiModelProperty("ios推送证书")
private String iosPushFile;
@ApiModelProperty("安卓推送证书")
private String androidPushFile;
@ApiModelProperty("客户方提供的唯一id")
private String clientId;
}
package com.wecloud.im.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wecloud.im.entity.ImClient;
import com.wecloud.im.param.ImClientPageParam;
import com.wecloud.im.param.ImClientQueryVo;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.io.Serializable;
/**
* 终端表 Mapper 接口
*
* @author wei
* @since 2021-04-27
*/
@Repository
public interface ImClientMapper extends BaseMapper<ImClient> {
/**
* 根据ID获取查询对象
*
* @param id
* @return
*/
ImClientQueryVo getImClientById(Serializable id);
/**
* 获取分页对象
*
* @param page
* @param imClientPageParam
* @return
*/
IPage<ImClientQueryVo> getImClientPageList(@Param("page") Page page, @Param("param") ImClientPageParam imClientPageParam);
}
package com.wecloud.im.param;
import io.geekidea.springbootplus.framework.core.pagination.BasePageOrderParam;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* <pre>
* 终端表 分页参数对象
* </pre>
*
* @author wei
* @date 2021-04-27
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "终端表分页参数")
public class ImClientPageParam extends BasePageOrderParam {
private static final long serialVersionUID = 1L;
}
package com.wecloud.im.param;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Date;
/**
* <pre>
* 终端表 查询结果对象
* </pre>
*
* @author wei
* @date 2021-04-27
*/
@Data
@Accessors(chain = true)
@ApiModel(value = "ImClientQueryVo对象")
public class ImClientQueryVo implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty("客户端id")
private Long id;
@ApiModelProperty("创建时间")
private Date createTime;
@ApiModelProperty("修改时间")
private Date updateTime;
@ApiModelProperty("应用appid")
private Long fkAppid;
@ApiModelProperty("可选 自定义属性,供开发者扩展使用。")
private String attributes;
@ApiModelProperty("ios推送证书")
private String iosPushFile;
@ApiModelProperty("安卓推送证书")
private String androidPushFile;
}
\ No newline at end of file
package com.wecloud.im.service;
import com.wecloud.im.entity.ImClient;
import com.wecloud.im.param.ImClientPageParam;
import com.wecloud.im.param.ImClientQueryVo;
import io.geekidea.springbootplus.framework.common.service.BaseService;
import io.geekidea.springbootplus.framework.core.pagination.Paging;
/**
* 终端表 服务类
*
* @author wei
* @since 2021-04-27
*/
public interface ImClientService extends BaseService<ImClient> {
/**
* 保存
*
* @param imClient
* @return
* @throws Exception
*/
boolean saveImClient(ImClient imClient) throws Exception;
/**
* 修改
*
* @param imClient
* @return
* @throws Exception
*/
boolean updateImClient(ImClient imClient) throws Exception;
/**
* 删除
*
* @param id
* @return
* @throws Exception
*/
boolean deleteImClient(Long id) throws Exception;
/**
* 根据ID获取查询对象
*
* @param id
* @return
* @throws Exception
*/
ImClientQueryVo getImClientById(Long id) throws Exception;
/**
* 获取分页对象
*
* @param imClientPageParam
* @return
* @throws Exception
*/
Paging<ImClientQueryVo> getImClientPageList(ImClientPageParam imClientPageParam) throws Exception;
}
package com.wecloud.im.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wecloud.im.entity.ImClient;
import com.wecloud.im.mapper.ImClientMapper;
import com.wecloud.im.param.ImClientPageParam;
import com.wecloud.im.param.ImClientQueryVo;
import com.wecloud.im.service.ImClientService;
import io.geekidea.springbootplus.framework.common.service.impl.BaseServiceImpl;
import io.geekidea.springbootplus.framework.core.pagination.PageInfo;
import io.geekidea.springbootplus.framework.core.pagination.Paging;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
/**
* 终端表 服务实现类
*
* @author wei
* @since 2021-04-27
*/
@Slf4j
@Service
public class ImClientServiceImpl extends BaseServiceImpl<ImClientMapper, ImClient> implements ImClientService {
@Autowired
private ImClientMapper imClientMapper;
@Transactional(rollbackFor = Exception.class)
@Override
public boolean saveImClient(ImClient imClient) throws Exception {
return super.save(imClient);
}
@Transactional(rollbackFor = Exception.class)
@Override
public boolean updateImClient(ImClient imClient) throws Exception {
return super.updateById(imClient);
}
@Transactional(rollbackFor = Exception.class)
@Override
public boolean deleteImClient(Long id) throws Exception {
return super.removeById(id);
}
@Override
public ImClientQueryVo getImClientById(Long id) throws Exception {
return imClientMapper.getImClientById(id);
}
@Override
public Paging<ImClientQueryVo> getImClientPageList(ImClientPageParam imClientPageParam) throws Exception {
Page<ImClientQueryVo> page = new PageInfo<>(imClientPageParam, OrderItem.desc(getLambdaColumn(ImClient::getCreateTime)));
IPage<ImClientQueryVo> iPage = imClientMapper.getImClientPageList(page, imClientPageParam);
return new Paging<ImClientQueryVo>(iPage);
}
}
......@@ -75,14 +75,6 @@ public class NettyApiRequest {
Map<String, String> paramMap = FullHttpRequestUtils.parameterParse(httpRequest);
String token = paramMap.get(Constants.TOKEN);
String deviceId = paramMap.get(RequestHeaderConstants.DEVICE_ID);
String language = paramMap.get(RequestHeaderConstants.LANGUAGE);
String platform = paramMap.get(RequestHeaderConstants.PLATFORM);
// 当前版本号 VERSIONNO
String versionNo = paramMap.get(RequestHeaderConstants.VERSION_NO);
// 请求头userId
String headerUserId = paramMap.get(RequestHeaderConstants.USER_ID);
// 设置uri前缀
httpRequest.setUri(Constants.APP_WS_URL);
......@@ -95,7 +87,6 @@ public class NettyApiRequest {
// ctx.channel().attr(AppUserChannelsService.LANGUAGE).set(language);
// 添加长连接handler
// ctx.pipeline().addAfter("appWebSocketServerProtocolHandler","appImHandler", appImHandler);
ctx.pipeline().addLast("appImHandler", appImHandler);
......
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.wecloud.im.mapper.ImClientMapper">
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
id
, create_time, update_time, fk_appid, attributes, ios_push_file, android_push_file
</sql>
<select id="getImClientById" resultType="com.wecloud.im.param.ImClientQueryVo">
select
<include refid="Base_Column_List"/>
from im_client where id = #{id}
</select>
<select id="getImClientPageList" parameterType="com.wecloud.im.param.ImClientPageParam"
resultType="com.wecloud.im.param.ImClientQueryVo">
select
<include refid="Base_Column_List"/>
from im_client
</select>
</mapper>
......@@ -23,8 +23,8 @@ spring:
# Redis配置
redis:
database: 0
host: 47.99.47.225
password: temple123456
host: localhost
password:
port: 6379
......
......@@ -216,7 +216,7 @@ public abstract class BaseLogAop {
/**
* 获取响应结果对象
*
* @param apiResult
* @param
*/
protected abstract void getResponseResult(Object result);
......
......@@ -97,6 +97,7 @@ public class JwtUtil {
.withSubject(jwtProperties.getSubject())
// 签发的目标
.withAudience(jwtProperties.getAudience())
.withClaim("test1","ddddddd")
// 签名时间
.withIssuedAt(new Date())
// token过期时间
......
......@@ -25,6 +25,8 @@ import io.geekidea.springbootplus.generator.constant.GeneratorConstant;
import io.geekidea.springbootplus.generator.properties.GeneratorProperties;
import org.springframework.stereotype.Component;
import java.util.Scanner;
/**
* spring-boot-plus代码生成器入口类
*
......@@ -41,11 +43,11 @@ public class SpringBootPlusGenerator {
*/
public static void main(String[] args) {
// Scanner sc = new Scanner(System.in);
// System.out.println("请输入表名称:");
// String name = sc.nextLine();
getCode("im_application");
// getCode(name);
Scanner sc = new Scanner(System.in);
System.out.println("请输入表名称:");
String name = sc.nextLine();
// getCode("im_application");
getCode(name);
}
private static void getCode(String tableName) {
......@@ -93,7 +95,7 @@ public class SpringBootPlusGenerator {
generatorProperties.getMybatisPlusGeneratorConfig().getGlobalConfig()
.setOpen(false)
.setSwagger2(true)
.setIdType(IdType.AUTO)
.setIdType(IdType.INPUT)
.setDateType(DateType.ONLY_DATE);
// 策略配置
......
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