Helius
2020-05-18 a5b282e1c85ea498377215e43ff475054bf2e4e2
finish login interface and modify some issue
12 files modified
14 files added
735 ■■■■■ changed files
pom.xml 9 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/common/contants/AppContants.java 10 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/common/exception/GlobalException.java 17 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/common/system/base/BaseEntity.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/common/system/bean/LoginUserBean.java 2 ●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/common/system/controller/CommonController.java 70 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/common/system/controller/LoginController.java 33 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/common/system/dto/RegisterDto.java 38 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/common/system/service/UserDetailsServiceImpl.java 24 ●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/configurations/GlobalExceptionHandler.java 17 ●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/configurations/interceptor/MybatisInterceptor.java 8 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/configurations/properties/ApplicationProperties.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/member/controller/MemberController.java 15 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/member/dao/MemberDao.java 13 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/member/entity/MemberAuthenticationEntity.java 56 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/member/entity/MemberEntity.java 88 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/member/entity/MemberWalletAgentEntity.java 53 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/member/entity/MemberWalletCoinEntity.java 61 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/member/entity/MemberWalletContractEntity.java 33 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/member/service/MemberService.java 11 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/member/service/impl/MemberServiceImpl.java 13 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/test/entity/TestUserEntity.java 4 ●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/utils/SSLClient.java 49 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/utils/SmsUtils.java 96 ●●●●● patch | view | raw | blame | history
src/main/resources/application.yml 3 ●●●● patch | view | raw | blame | history
src/main/resources/mapper/member/MemberDao.xml 8 ●●●●● patch | view | raw | blame | history
pom.xml
@@ -165,6 +165,15 @@
            <version>${fastjson.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
        </dependency>
        <dependency>
            <groupId>dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>1.6.1</version>
        </dependency>
    </dependencies>
src/main/java/com/xcong/excoin/common/contants/AppContants.java
@@ -27,4 +27,14 @@
     */
    public static final String TOKEN_START_WITH = "Bearer ";
    /**
     * 账号类型-手机号
     */
    public static final String ACCOUNT_TYPE_MOBILE = "1";
    /**
     * 账号类型-邮箱
     */
    public static final String ACCOUNT_TYPE_EMAIL = "2";
}
src/main/java/com/xcong/excoin/common/exception/GlobalException.java
New file
@@ -0,0 +1,17 @@
package com.xcong.excoin.common.exception;
import lombok.Getter;
/**
 * 统一异常处理
 *
 * @author wzy
 * @date 2020-05-18
 **/
@Getter
public class GlobalException extends RuntimeException {
    public GlobalException(String msg) {
        super(msg);
    }
}
src/main/java/com/xcong/excoin/common/system/base/BaseEntity.java
@@ -28,4 +28,6 @@
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date updateTime;
    private Integer version;
}
src/main/java/com/xcong/excoin/common/system/bean/LoginUserBean.java
@@ -32,7 +32,7 @@
    @JsonIgnore
    @Override
    public String getUsername() {
        return memberEntity.getUsername();
        return "";
    }
    @JsonIgnore
src/main/java/com/xcong/excoin/common/system/controller/CommonController.java
New file
@@ -0,0 +1,70 @@
package com.xcong.excoin.common.system.controller;
import com.xcong.excoin.common.contants.AppContants;
import com.xcong.excoin.common.response.Result;
import com.xcong.excoin.utils.RedisUtils;
import com.xcong.excoin.utils.SmsUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Map;
/**
 * 公共请求类
 *
 * @author wzy
 * @date 2020-05-18
 **/
@Slf4j
@Api(value = "公共请求类", tags = "公共请求类")
@RestController
@RequestMapping(value = "/common")
public class CommonController {
    private static final String SUCCESS = "Success";
    @Resource
    private RedisUtils redisUtils;
    @ApiOperation(value = "获取验证码接口", notes = "获取验证码通用接口")
    @GetMapping(value = "/verifyCode")
    public Result verifyCode(String account, String type) {
        log.info("#账号:{}, 类型:{}#", account, type);
        int code = (int) ((Math.random() * 9 + 1) * 100000);
        if (AppContants.ACCOUNT_TYPE_MOBILE.equals(type)) {
            Map<String, Object> result = SmsUtils.sendVerifyCode(account, code);
            if (SUCCESS.equals(result.get("resultstatus"))) {
                Map<String, Object> map = new HashMap<>();
                boolean flag = redisUtils.set("SMS_" + account, code, 120);
                map.put("code", flag);
                return Result.ok("success", map);
            }
        } else if (AppContants.ACCOUNT_TYPE_EMAIL.equals(type)) {
            return Result.ok("success");
        } else {
            log.info("未定义账号类型");
            return Result.fail("fail");
        }
        return Result.fail("fail");
    }
    @ApiOperation(value = "验证验证码是否正确", notes = "验证验证码是否正确")
    @GetMapping(value = "/checkVerify")
    public Result checkVerify() {
        return null;
    }
    @ApiOperation(value = "文件上次接口", notes = "文件上传")
    @GetMapping(value = "/uploadFile")
    public Result uploadFile() {
        return null;
    }
}
src/main/java/com/xcong/excoin/common/system/controller/LoginController.java
@@ -1,17 +1,23 @@
package com.xcong.excoin.common.system.controller;
import cn.hutool.core.util.IdUtil;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.crypto.asymmetric.KeyType;
import cn.hutool.crypto.asymmetric.RSA;
import cn.hutool.crypto.asymmetric.Sign;
import cn.hutool.crypto.asymmetric.SignAlgorithm;
import com.alibaba.fastjson.JSONObject;
import com.xcong.excoin.common.contants.AppContants;
import com.xcong.excoin.common.response.Result;
import com.xcong.excoin.common.system.bean.LoginUserBean;
import com.xcong.excoin.common.system.dto.LoginDto;
import com.xcong.excoin.common.system.dto.RegisterDto;
import com.xcong.excoin.configurations.properties.ApplicationProperties;
import com.xcong.excoin.configurations.properties.SecurityProperties;
import com.xcong.excoin.modules.member.service.MemberService;
import com.xcong.excoin.utils.RedisUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
@@ -31,10 +37,13 @@
 * @Version V1.0
 **/
@Slf4j
@Api(value = "登陆类", tags = "登陆类")
@Api(value = "登陆注册类", tags = "登陆注册类")
@RestController
@RequestMapping(value = "/")
public class LoginController {
    @Resource
    private MemberService memberservice;
    @Resource
    private ApplicationProperties applicationProperties;
@@ -48,14 +57,25 @@
    @Resource
    private RedisUtils redisUtils;
    @ApiOperation(value = "登陆接口", notes = "登陆接口")
    @PostMapping("/login")
    public Result login(@RequestBody @Validated LoginDto loginDto) {
        // 使用md5加密前端传来的密码
        Sign sign = SecureUtil.sign(SignAlgorithm.MD5withRSA);
        byte[] pwdByte = sign.sign(loginDto.getPassword().getBytes());
        // 将账号密码交给spring security验证,并调用userServiceDetails
        UsernamePasswordAuthenticationToken authToken = new UsernamePasswordAuthenticationToken(loginDto.getUsername(), loginDto.getPassword());
        Authentication authentication = authenticationManagerBuilder.getObject().authenticate(authToken);
        String token = IdUtil.simpleUUID();
        // 获取当前验证过后的用户
        LoginUserBean loginUserBean = (LoginUserBean) authentication.getPrincipal();
        redisUtils.set(AppContants.APP_LOGIN_PREFIX + token, JSONObject.toJSONString(loginUserBean), 300000);
        // 生成UUID作为token
        String token = IdUtil.simpleUUID();
        redisUtils.set(AppContants.APP_LOGIN_PREFIX + token, JSONObject.toJSONString(loginUserBean), applicationProperties.getRedisExpire());
        Map<String, Object> authInfo = new HashMap<>();
        // 开启debug模式,则将加密后的token返回
        if (applicationProperties.isDebug()) {
            authInfo.put("token", token);
            authInfo.put("rsaToken", generateAsaToken(token));
@@ -71,4 +91,11 @@
        RSA rsa = new RSA(null, securityProperties.getPublicKey());
        return rsa.encryptBase64(token + "_" +System.currentTimeMillis(), KeyType.PublicKey);
    }
    @ApiOperation(value = "app注册接口", notes = "app注册接口,验证码必须输入可默认为123456")
    @PostMapping(value = "/register")
    public Result register(@RequestBody @Validated RegisterDto registerDto) {
        return null;
    }
}
src/main/java/com/xcong/excoin/common/system/dto/RegisterDto.java
New file
@@ -0,0 +1,38 @@
package com.xcong.excoin.common.system.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotBlank;
/**
 * 注册用户接收类
 *
 * @author wzy
 * @date 2020-05-18
 **/
@Data
@ApiModel(value = "注册接口参数类", description = "注册接口参数类")
public class RegisterDto {
    @ApiModelProperty(value = "账号", example = "13412341234")
    @NotBlank(message = "账号不能为空")
    private String account;
    @ApiModelProperty(value = "密码", example = "123456")
    @NotBlank(message = "密码不能为空")
    private String password;
    @ApiModelProperty(value = "账号类型", notes = "1-手机 2-邮箱", example = "1")
    @NotBlank(message = "账号类型不能为空")
    private String type;
    @ApiModelProperty(value = "验证码", example = "123456")
    @NotBlank(message = "验证码不能为空")
    private String code;
    @ApiModelProperty(value = "推荐人id", example = "rxadr3")
    private String refererId;
}
src/main/java/com/xcong/excoin/common/system/service/UserDetailsServiceImpl.java
@@ -1,6 +1,11 @@
package com.xcong.excoin.common.system.service;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.crypto.asymmetric.Sign;
import cn.hutool.crypto.asymmetric.SignAlgorithm;
import com.xcong.excoin.common.exception.GlobalException;
import com.xcong.excoin.common.system.bean.LoginUserBean;
import com.xcong.excoin.modules.member.dao.MemberDao;
import com.xcong.excoin.modules.member.entity.MemberEntity;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.core.GrantedAuthority;
@@ -9,6 +14,7 @@
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
@@ -22,16 +28,26 @@
@Service("userDetailsService")
public class UserDetailsServiceImpl implements UserDetailsService {
    @Resource
    private MemberDao memberDao;
    @Override
    public LoginUserBean loadUserByUsername(String username) throws UsernameNotFoundException {
        log.info("#登陆账号:{}#", username);
        List<GrantedAuthority> grantedAuthorities = new ArrayList<>();
//        GrantedAuthority grantedAuthority = new SimpleGrantedAuthority("ROLE_ADMIN");
//        grantedAuthorities.add(grantedAuthority);
        MemberEntity memberEntity = new MemberEntity();
        memberEntity.setId(1L);
        memberEntity.setUsername("11111");
        memberEntity.setPassword(new BCryptPasswordEncoder().encode("123456"));
        MemberEntity memberEntity = memberDao.selectMemberInfoByAccount(username);
        if (memberEntity != null) {
            memberEntity.setPassword(new BCryptPasswordEncoder().encode(memberEntity.getPassword()));
        } else {
            throw new UsernameNotFoundException("");
        }
        if (MemberEntity.ACCOUNT_STATUS_DISABLED == memberEntity.getAccountStatus()) {
            throw new GlobalException("账号已被禁用");
        }
        return new LoginUserBean(memberEntity, null, null);
    }
src/main/java/com/xcong/excoin/configurations/GlobalExceptionHandler.java
@@ -1,5 +1,6 @@
package com.xcong.excoin.configurations;
import com.xcong.excoin.common.exception.GlobalException;
import com.xcong.excoin.common.response.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.dao.DuplicateKeyException;
@@ -49,11 +50,6 @@
        return null;
    }
    @ExceptionHandler(value = {Exception.class})
    public Result handleException(Exception e) {
        log.error(e.getMessage(), e);
        return Result.fail("系统异常");
    }
    /**
     * spring security 账户密码验证异常
@@ -67,4 +63,15 @@
        return Result.fail("用户名或密码错误");
    }
    @ExceptionHandler(value = {GlobalException.class})
    public Result handleException(GlobalException e) {
        return Result.fail(e.getMessage());
    }
    @ExceptionHandler(value = {Exception.class})
    public Result handleException(Exception e) {
        log.error(e.getMessage(), e);
        return Result.fail("系统异常");
    }
}
src/main/java/com/xcong/excoin/configurations/interceptor/MybatisInterceptor.java
@@ -79,8 +79,9 @@
        if (o instanceof BaseEntity) {
            BaseEntity baseEntity = (BaseEntity) o;
            if (member != null) {
                baseEntity.setCreateBy(member.getUsername());
                baseEntity.setUpdateBy(member.getUsername());
                String by = member.getPhone() != null ? member.getPhone() : member.getEmail();
                baseEntity.setCreateBy(by);
                baseEntity.setUpdateBy(by);
            } else {
                baseEntity.setCreateBy(AppContants.SYSTEM_USER);
                baseEntity.setUpdateBy(AppContants.SYSTEM_USER);
@@ -95,7 +96,8 @@
        if (o instanceof BaseEntity) {
            BaseEntity baseEntity = (BaseEntity) o;
            if (member != null) {
                baseEntity.setUpdateBy(member.getUsername());
                String by = member.getPhone() != null ? member.getPhone() : member.getEmail();
                baseEntity.setUpdateBy(by);
            } else {
                baseEntity.setUpdateBy(AppContants.SYSTEM_USER);
            }
src/main/java/com/xcong/excoin/configurations/properties/ApplicationProperties.java
@@ -15,4 +15,6 @@
@ConfigurationProperties(prefix = "app")
public class ApplicationProperties {
    private boolean debug;
    private Long redisExpire;
}
src/main/java/com/xcong/excoin/modules/member/controller/MemberController.java
New file
@@ -0,0 +1,15 @@
package com.xcong.excoin.modules.member.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * 用户类
 *
 * @author wzy
 * @date 2020-05-18
 **/
@RestController
@RequestMapping(value = "/api/member")
public class MemberController {
}
src/main/java/com/xcong/excoin/modules/member/dao/MemberDao.java
New file
@@ -0,0 +1,13 @@
package com.xcong.excoin.modules.member.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.xcong.excoin.modules.member.entity.MemberEntity;
import org.apache.ibatis.annotations.Param;
/**
 * @author wzy
 */
public interface MemberDao extends BaseMapper<MemberEntity> {
    public MemberEntity selectMemberInfoByAccount(@Param("account") String account);
}
src/main/java/com/xcong/excoin/modules/member/entity/MemberAuthenticationEntity.java
New file
@@ -0,0 +1,56 @@
package com.xcong.excoin.modules.member.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.xcong.excoin.common.system.base.BaseEntity;
import lombok.Data;
/**
 * 用户实名认证信息实体
 *
 * @author wzy
 * @date 2020-05-18
 **/
@Data
@TableName("member_authentication")
public class MemberAuthenticationEntity extends BaseEntity {
    /**
     * 用户ID
     */
    private Long memberId;
    /**
     * 真实姓名
     */
    private String realName;
    /**
     * 姓
     */
    private String firstName;
    /**
     * 名
     */
    private String secondName;
    /**
     * 国家
     */
    private String nation;
    /**
     * 身份证正面
     */
    private String idcardImageFront;
    /**
     * 身份证背面
     */
    private String idcardImageBack;
    /**
     * 手持身份证
     */
    private String idcardImageInHand;
}
src/main/java/com/xcong/excoin/modules/member/entity/MemberEntity.java
@@ -1,5 +1,6 @@
package com.xcong.excoin.modules.member.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.xcong.excoin.common.system.base.BaseEntity;
import lombok.Data;
@@ -12,12 +13,91 @@
 * @date 2020-05-12
 **/
@Data
public class MemberEntity extends BaseEntity implements Serializable {
    private static final long serialVersionUID = -1L;
@TableName("member")
public class MemberEntity extends BaseEntity {
    private Long id;
    /**
     * 账号状态 - 禁用
     */
    public static final Integer ACCOUNT_STATUS_DISABLED = 0;
    private String username;
    /**
     * 账号状态 - 启用
     */
    public static final Integer ACCOUNT_STATUS_ENABLE = 1;
    /**
     * 手机号(包含国际手机号)
     */
    private String phone;
    /**
     * 邮箱
     */
    private String email;
    /**
     * 登陆密码
     */
    private String password;
    /**
     * 交易密码
     */
    private String tradePassword;
    /**
     * 交易密码时效性设置
     */
    private Integer tradeAgingSetting;
    /**
     * 邀请码
     */
    private String inviteId;
    /**
     * 账号状态 0-禁用 1-启用
     */
    private int accountStatus;
    /**
     * 上级推荐人id
     */
    private String refererId;
    /**
     * 上级推荐人ID链
     */
    private String refererIds;
    /**
     * 账号类型 1-正常账号 2-测试账号
     */
    private Integer accountType;
    /**
     * 代理级别
     */
    private Integer agentLevel;
    /**
     * 实名认证状态 0-审核未通过 1-审核通过 2-等待审核
     */
    private Integer certifyStatus;
    /**
     * 身份证号
     */
    private String idcardNo;
    /**
     * 是否设置盈亏难度系数 0-否1-是
     */
    private Integer isProfit;
    /**
     * 是否设置预估强平价系数 0-否1-是
     */
    private Integer isForce;
}
src/main/java/com/xcong/excoin/modules/member/entity/MemberWalletAgentEntity.java
New file
@@ -0,0 +1,53 @@
package com.xcong.excoin.modules.member.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.xcong.excoin.common.system.base.BaseEntity;
import lombok.Data;
import java.math.BigDecimal;
/**
 * 代理用户钱包
 *
 * @author wzy
 * @date 2020-05-18
 **/
@Data
@TableName("member_wallet_agent")
public class MemberWalletAgentEntity extends BaseEntity {
    /**
     * 用户Id
     */
    private Long memberId;
    /**
     * 可用余额
     */
    private BigDecimal availableBalance;
    /**
     * 总金额
     */
    private BigDecimal totalBalance;
    /**
     * 冻结金额
     */
    private BigDecimal frozenBalance;
    /**
     * 借入资产金额
     */
    private BigDecimal borrowedFund;
    /**
     * 钱包标识
     */
    private String walletCode;
    /**
     * 钱包地址
     */
    private String walletAddress;
}
src/main/java/com/xcong/excoin/modules/member/entity/MemberWalletCoinEntity.java
New file
@@ -0,0 +1,61 @@
package com.xcong.excoin.modules.member.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.xcong.excoin.common.system.base.BaseEntity;
import lombok.Data;
import java.math.BigDecimal;
/**
 * @author wzy
 * @date 2020-05-18
 **/
@Data
@TableName("member_wallet_coin")
public class MemberWalletCoinEntity extends BaseEntity {
    /**
     * 用户Id
     */
    private Long memberId;
    /**
     * 可用余额
     */
    private BigDecimal availableBalance;
    /**
     * 总金额
     */
    private BigDecimal totalBalance;
    /**
     * 冻结金额
     */
    private BigDecimal frozenBalance;
    /**
     * 借入资产金额
     */
    private BigDecimal borrowedFund;
    /**
     * 钱包标识
     */
    private String walletCode;
    /**
     * 钱包地址
     */
    private String walletAddress;
    /**
     * 上次余额
     */
    private BigDecimal earlyBalance;
    /**
     * 区块编号
     */
    private int blockNumber;
}
src/main/java/com/xcong/excoin/modules/member/entity/MemberWalletContractEntity.java
New file
@@ -0,0 +1,33 @@
package com.xcong.excoin.modules.member.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.xcong.excoin.common.system.base.BaseEntity;
import lombok.Data;
import java.math.BigDecimal;
/**
 * @author wzy
 * @date 2020-05-18
 **/
@Data
@TableName("member_wallet_contract")
public class MemberWalletContractEntity extends BaseEntity {
    private Long memberId;
    private BigDecimal availableBalance;
    private BigDecimal totalBalance;
    private BigDecimal frozenBalance;
    private BigDecimal borrowedFund;
    private BigDecimal earlyBalance;
    private int blockNumber;
    private String walletCode;
    private String walletAddress;
}
src/main/java/com/xcong/excoin/modules/member/service/MemberService.java
New file
@@ -0,0 +1,11 @@
package com.xcong.excoin.modules.member.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.xcong.excoin.modules.member.entity.MemberEntity;
import com.xcong.excoin.modules.test.entity.TestUserEntity;
/**
 * @author wzy
 */
public interface MemberService extends IService<MemberEntity> {
}
src/main/java/com/xcong/excoin/modules/member/service/impl/MemberServiceImpl.java
New file
@@ -0,0 +1,13 @@
package com.xcong.excoin.modules.member.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xcong.excoin.modules.member.dao.MemberDao;
import com.xcong.excoin.modules.member.entity.MemberEntity;
import com.xcong.excoin.modules.member.service.MemberService;
/**
 * @author wzy
 * @date 2020-05-18
 **/
public class MemberServiceImpl extends ServiceImpl<MemberDao, MemberEntity> implements MemberService {
}
src/main/java/com/xcong/excoin/modules/test/entity/TestUserEntity.java
@@ -1,5 +1,6 @@
package com.xcong.excoin.modules.test.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.xcong.excoin.common.system.base.BaseEntity;
import lombok.Data;
@@ -19,4 +20,7 @@
    private String account;
    private String password;
    @TableField(exist = false)
    private String aaaaa;
}
src/main/java/com/xcong/excoin/utils/SSLClient.java
New file
@@ -0,0 +1,49 @@
package com.xcong.excoin.utils;
import org.apache.http.conn.ClientConnectionManager;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.impl.client.DefaultHttpClient;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
@SuppressWarnings("deprecation")
class SSLClient extends DefaultHttpClient {
    public SSLClient() throws Exception {
        super();
        SSLContext ctx = SSLContext.getInstance("TLS");
        X509TrustManager tm = new X509TrustManager() {
            @Override
            public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
                // TODO Auto-generated method stub
            }
            @Override
            public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
                // TODO Auto-generated method stub
            }
            @Override
            public X509Certificate[] getAcceptedIssuers() {
                // TODO Auto-generated method stub
                return null;
            }
        };
        ctx.init(null, new TrustManager[] { tm }, null);
        SSLSocketFactory ssf = new SSLSocketFactory(ctx, SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
        ClientConnectionManager ccm = this.getConnectionManager();
        SchemeRegistry sr = ccm.getSchemeRegistry();
        sr.register(new Scheme("https", 443, ssf));
    }
}
src/main/java/com/xcong/excoin/utils/SmsUtils.java
New file
@@ -0,0 +1,96 @@
package com.xcong.excoin.utils;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * 短信发送工具
 *
 * @author wzy
 * @date 2020-05-18
 **/
public class SmsUtils {
    private static HttpClient httpclient;
    @SuppressWarnings("deprecation")
    public static Map<String, Object> hxSmsSend(String mobile, String sendContent) {
        Map<String, Object> map = new HashMap<String, Object>();
        try {
            httpclient = new SSLClient();
            //TFT001
            String url = "https://dx.ipyy.net/sms.aspx";
            //excoin DX001        //ctcoin:OT00028            //改为实际账号名
            String accountName = "DX001";
            //excoin 1qaz2wsx    //ctcoin:    atvckt                //改为实际发送密码
            String password = "1qaz2wsx";
            String text = sendContent;
            HttpPost post = new HttpPost(url);
            post.setHeader("Content-type", "application/x-www-form-urlencoded;charset=utf-8");
            List<NameValuePair> nvps = new ArrayList<NameValuePair>();
            nvps.add(new BasicNameValuePair("action", "send"));
            nvps.add(new BasicNameValuePair("userid", ""));
            nvps.add(new BasicNameValuePair("account", accountName));
            nvps.add(new BasicNameValuePair("password", password));
            //多个手机号用逗号分隔
            nvps.add(new BasicNameValuePair("mobile", mobile));
            nvps.add(new BasicNameValuePair("content", text));
            nvps.add(new BasicNameValuePair("sendTime", ""));
            nvps.add(new BasicNameValuePair("extno", ""));
            post.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
            HttpResponse response = httpclient.execute(post);
            HttpEntity entity = response.getEntity();
            // 将字符转化为XML
            String returnString = EntityUtils.toString(entity, "UTF-8");
            Document doc = DocumentHelper.parseText(returnString);
            // 获取根节点
            Element rootElt = doc.getRootElement();
            // 获取根节点下的子节点的值
            String returnstatus = rootElt.elementText("returnstatus").trim();
            String message = rootElt.elementText("message").trim();
            String remainpoint = rootElt.elementText("remainpoint").trim();
            String taskID = rootElt.elementText("taskID").trim();
            String successCounts = rootElt.elementText("successCounts").trim();
            map.put("returnstatus", returnstatus);
            map.put("message", message);
            map.put("remainpoint", remainpoint);
            map.put("taskID", taskID);
            map.put("successCounts", successCounts);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return map;
    }
    /**
     * 短信验证码
     *
     * @param phone 手机号
     * @param code  验证码
     * @return
     */
    public static Map<String, Object> sendVerifyCode(String phone, int code) {
        String smsContent = "【Excoin】您的验证码为:"+code+",该验证码有效期为2分钟,请勿泄露于他人。";
        return hxSmsSend(phone, smsContent);
    }
}
src/main/resources/application.yml
@@ -70,11 +70,12 @@
    ## 连接超时时间(毫秒)
    timeout: 30000
mybatis-plus:
  mapper-locations: classpath:mapper/*.xml
  mapper-locations: classpath:mapper/**/*.xml
app:
  debug: true
  redis_expire: 3000
rsa:
  public_key: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCCf8UFZK54AiK4PRu7tNd+Z8qZ77o/QXCnk25DRmygVpOEu5mGNSAvfnWmKp2pEV2RljeXq3Rid/+LQkonaebMJeXKSF0yxL/VgyeT8JaQ5gNbOrdfdlc+mFkXJyzyJt8YkvApEdPRNSU2ENBn7mgRfD0BYPM4vZ6/rv+de38FJwIDAQAB
src/main/resources/mapper/member/MemberDao.xml
New file
@@ -0,0 +1,8 @@
<?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.xcong.excoin.modules.member.dao.MemberDao">
    <select id="selectMemberInfoByAccount" resultType="com.xcong.excoin.modules.member.entity.MemberEntity">
        select * from member where phone=#{account} or email=#{account}
    </select>
</mapper>