1
zj
3 days ago c951cb4fc418bc03f2eb1acc604d936716f38f84
1
4 files modified
3 files added
248 ■■■■ changed files
src/main/java/com/nq/controller/AdminApiController.java 109 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/pojo/GoogleAuthDto.java 14 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/pojo/SiteAdmin.java 11 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/pojo/UnbindingGoogleAuthModel.java 17 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/pojo/UpdateGoogleAuthDto.java 21 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/service/ISiteAdminService.java 8 ●●●● patch | view | raw | blame | history
src/main/java/com/nq/service/impl/SiteAdminServiceImpl.java 68 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/controller/AdminApiController.java
@@ -1,9 +1,13 @@
package com.nq.controller;
import com.nq.common.ServerResponse;
import com.nq.dao.SiteAdminMapper;
import com.nq.pojo.GoogleAuthDto;
import com.nq.pojo.SiteAdmin;
import com.nq.pojo.SiteAdminIndex;
import com.nq.pojo.SiteSpread;
import com.nq.service.*;
import com.nq.service.impl.GoogleAuthenticator;
import com.nq.utils.PropertiesUtil;
import com.nq.utils.redis.CookieUtils;
import com.nq.utils.redis.JsonUtil;
@@ -14,13 +18,12 @@
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.*;
@Controller
@RequestMapping({"/api/admin/"})
@@ -47,12 +50,19 @@
    @Autowired
    SiteAdminIndexService siteAdminIndexService;
    @Autowired
    SiteAdminMapper siteAdminMapper;
    //管理系统登录
    @RequestMapping({"login.do"})
    @ResponseBody
    public ServerResponse login(@RequestParam("adminPhone") String adminPhone, @RequestParam("adminPwd") String adminPwd, @RequestParam("verifyCode") String verifyCode, HttpSession httpSession, HttpServletRequest request, HttpServletResponse response) {
        ServerResponse serverResponse = this.iSiteAdminService.login(adminPhone, adminPwd, verifyCode, request);
    public ServerResponse login(@RequestParam("adminPhone") String adminPhone,
                                @RequestParam("adminPwd") String adminPwd,
                                @RequestParam("verifyCode") String verifyCode,
                                @RequestParam(value = "googleAuthCode", required = false) Integer googleAuthCode,
                                HttpSession httpSession, HttpServletRequest request,
                                HttpServletResponse response) {
        ServerResponse serverResponse = this.iSiteAdminService.login(adminPhone, adminPwd, verifyCode, googleAuthCode,request);
        return serverResponse;
    }
@@ -127,6 +137,95 @@
    /**
     * 获取当前登录用户
     * @return
     */
    @GetMapping("getAdmin")
    @ResponseBody
    public ServerResponse getAdmin(HttpServletRequest request) {
        String cookie_name = PropertiesUtil.getProperty("admin.cookie.name");
        SiteAdmin siteAdmin = null;
        if(StringUtils.isNotEmpty(cookie_name)){
            String logintoken = CookieUtils.readLoginToken(request, cookie_name);
            String adminJson = RedisShardedPoolUtils.get(logintoken);
            siteAdmin = (SiteAdmin) JsonUtil.string2Obj(adminJson, SiteAdmin.class);
            siteAdmin = siteAdminMapper.selectById(siteAdmin.getId());
        }
        return ServerResponse.createBySuccess(siteAdmin);
    }
    /**
     * 获取谷歌验证码密钥
     * @return
     */
    @GetMapping("getLoginGoogleAuthSecret")
    @ResponseBody
    public ServerResponse getLoginGoogleAuthSecret(HttpServletRequest request) {
        GoogleAuthDto dto = iSiteAdminService.getGoogleAuth(request);
        return ServerResponse.createBySuccess(dto);
    }
    /**
     * 绑定谷歌验证码
     */
    @PostMapping("bindGoogleAuth")
    @ResponseBody
    public ServerResponse updateGoogleAuth(@RequestParam("id") String id,
                                           @RequestParam("googleAuthCode") String googleAuthCode,
                                           @RequestParam("secret") String secret) {
        SiteAdmin siteAdmin = siteAdminMapper.selectById(id);
        if (siteAdmin == null) {
            return ServerResponse.createByErrorMsg("当前用户未找到");
        }
        long t = System.currentTimeMillis();
        GoogleAuthenticator ga = new GoogleAuthenticator();
        ga.setWindowSize(5);
        if (siteAdmin.getGoogleAuthBind()) {
            return ServerResponse.createByErrorMsg("谷歌验证码已绑定");
        }
        boolean userFlag = ga.check_code(secret, Long.valueOf(googleAuthCode), t);
        if (!userFlag) {
            return ServerResponse.createByErrorMsg("谷歌验证码错误");
        }
        siteAdmin.setGoogleAuthBind(true);
        siteAdmin.setGoogleAuthSecret(secret);
        siteAdminMapper.updateById(siteAdmin);
        return ServerResponse.createBySuccess();
    }
    /**
     * 解绑谷歌验证码
     * @param param
     * @return
     */
    @PostMapping("/unbindingGoogleAuth")
    @ResponseBody
    public ServerResponse unbindingGoogleAuth(@RequestParam("id") String id,
                                              @RequestParam("rootGoogleAuthCode") String rootGoogleAuthCode) {
        SiteAdmin siteAdmin = siteAdminMapper.selectById(id);
        if (siteAdmin == null) {
            return ServerResponse.createByErrorMsg("当前用户未找到");
        }
        long t = System.currentTimeMillis();
        GoogleAuthenticator ga = new GoogleAuthenticator();
        ga.setWindowSize(5);
        boolean flag = ga.check_code(siteAdmin.getGoogleAuthSecret(), Long.valueOf(rootGoogleAuthCode), t);
        if (flag) {
            if (!siteAdmin.getGoogleAuthBind()) {
                return ServerResponse.createByErrorMsg("谷歌验证码未绑定,无需解绑!");
            }
            siteAdmin.setGoogleAuthBind(false);
            siteAdmin.setGoogleAuthSecret("");
            siteAdminMapper.updateById(siteAdmin);
        } else {
            return ServerResponse.createByErrorMsg("超级谷歌验证码错误");
        }
        return ServerResponse.createBySuccess();
    }
//    //页面样式设置
src/main/java/com/nq/pojo/GoogleAuthDto.java
New file
@@ -0,0 +1,14 @@
package com.nq.pojo;
import lombok.Data;
@Data
public class GoogleAuthDto {
    //密钥
    private  String googleAuthSecret;
    //密钥
    private  String googleAuthImg;
}
src/main/java/com/nq/pojo/SiteAdmin.java
@@ -1,6 +1,7 @@
package com.nq.pojo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.util.Date;
@@ -15,6 +16,14 @@
    private Date addTime;
    private String token;
    /**
     * 谷歌验证器
     */
    @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
    private String googleAuthSecret;
    /**
     * 谷歌验证器是否绑定
     */
    private Boolean googleAuthBind=false;
}
src/main/java/com/nq/pojo/UnbindingGoogleAuthModel.java
New file
@@ -0,0 +1,17 @@
package com.nq.pojo;
import lombok.Data;
import javax.validation.constraints.NotBlank;
@Data
public class UnbindingGoogleAuthModel {
    private  long id;
    //谷歌验证码
    @NotBlank
    private String rootGoogleAuthCode;
}
src/main/java/com/nq/pojo/UpdateGoogleAuthDto.java
New file
@@ -0,0 +1,21 @@
package com.nq.pojo;
import lombok.Data;
import javax.validation.constraints.NotBlank;
@Data
public class UpdateGoogleAuthDto {
    private  long id;
    //谷歌密钥
    @NotBlank
    private String secret;
    //验证码
    private String googleAuthCode;
}
src/main/java/com/nq/service/ISiteAdminService.java
@@ -3,12 +3,15 @@
import com.github.pagehelper.PageInfo;
import com.nq.common.ServerResponse;
import com.nq.pojo.GoogleAuthDto;
import com.nq.pojo.SiteAdmin;
import javax.servlet.http.HttpServletRequest;
public interface ISiteAdminService {
  ServerResponse login(String paramString1, String paramString2, String paramString3, HttpServletRequest paramHttpServletRequest);
  ServerResponse login(String paramString1, String paramString2, String paramString3, Integer googleAuthCode,HttpServletRequest paramHttpServletRequest);
  
  ServerResponse<PageInfo> listByAdmin(String paramString1, String paramString2, HttpServletRequest paramHttpServletRequest, int paramInt1, int paramInt2);
  
@@ -29,4 +32,7 @@
  ServerResponse deleteAdmin(Integer adminId);
  ServerResponse moneyCount(String agentId, String startTime, String entTime);
  GoogleAuthDto getGoogleAuth(HttpServletRequest request);
}
src/main/java/com/nq/service/impl/SiteAdminServiceImpl.java
@@ -1,6 +1,9 @@
package com.nq.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.extra.qrcode.QrCodeUtil;
import cn.hutool.extra.qrcode.QrConfig;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.nq.dao.*;
@@ -30,6 +33,7 @@
import com.nq.utils.PropertiesUtil;
import com.nq.utils.SymmetricCryptoUtil;
import com.nq.utils.redis.CookieUtils;
import com.nq.utils.redis.JsonUtil;
import com.nq.utils.redis.RedisConst;
import com.nq.utils.redis.RedisShardedPoolUtils;
@@ -109,53 +113,43 @@
    @Autowired
    AgentUserMapper agentUserMapper;
    public ServerResponse login(String adminPhone, String adminPwd, String verifyCode, HttpServletRequest request) {
    public ServerResponse login(String adminPhone, String adminPwd, String verifyCode,Integer googleAuthCode, HttpServletRequest request) {
        if (StringUtils.isBlank(verifyCode)) {
            return ServerResponse.createByErrorMsg("验证码不能为空");
        }
//
        String original = (String) request.getSession().getAttribute("KAPTCHA_SESSION_KEY");
        /*if (!verifyCode.equalsIgnoreCase(original)) {
            return ServerResponse.createByErrorMsg("验证码错误");
        }*/
        if (StringUtils.isBlank(adminPhone) || StringUtils.isBlank(adminPwd)) {
        if (StringUtils.isBlank(adminPhone) || StringUtils.isBlank(adminPwd) ) {
            return ServerResponse.createByErrorMsg("参数不能为空");
        }
        SymmetricCryptoUtil.decryptPassword("8OTlTNZ9EwQ29Pf0R8a37Q==");
        adminPwd = SymmetricCryptoUtil.encryptPassword(adminPwd);
        SiteAdmin siteAdmin = this.siteAdminMapper.login(adminPhone, adminPwd);
//        SiteAdmin siteAdmin = (SiteAdmin) siteAdminMapper.selectOne(new QueryWrapper<SiteAdmin>().eq("admin_phone", adminPhone).eq("admin_pwd", adminPwd));
        if (siteAdmin == null) {
            return ServerResponse.createByErrorMsg("账号密码错误");
        }
        if (siteAdmin.getIsLock().intValue() == 1) {
            return ServerResponse.createByErrorMsg("账号已被锁定");
        }
        if(siteAdmin.getGoogleAuthBind() && ObjectUtil.isEmpty(googleAuthCode)){
            return ServerResponse.createByErrorMsg("谷歌验证码不能为空");
        }
        if(siteAdmin.getGoogleAuthBind()){
            long t = System.currentTimeMillis();
            GoogleAuthenticator ga = new GoogleAuthenticator();
            ga.setWindowSize(5);
            boolean userFlag = ga.check_code(siteAdmin.getGoogleAuthSecret(), Long.valueOf(googleAuthCode), t);
            if (!userFlag) {
                return ServerResponse.createByErrorMsg("谷歌验证码错误!");
            }
        }
        siteAdmin.setAdminPwd(null);
        HttpSession httpSession = request.getSession();
        String token = RedisConst.getAdminRedisKey(httpSession.getId());
        String str = RedisShardedPoolUtils.setEx(token,
        RedisShardedPoolUtils.setEx(token,
                JsonUtil.obj2String(siteAdmin), 999999);
@@ -164,6 +158,30 @@
    }
    @Override
    public GoogleAuthDto getGoogleAuth(HttpServletRequest request) {
        String secretKey = GoogleAuthenticator.generateSecretKey();
        QrConfig config = new QrConfig(345, 345);
        config.setMargin(3);
        String cookie_name = PropertiesUtil.getProperty("admin.cookie.name");
        SiteAdmin siteAdmin = null;
        if(StringUtils.isNotEmpty(cookie_name)){
            siteAdmin = getAdmin(cookie_name,request);
        }
        String content = String.format("otpauth://totp/%s?secret=%s", siteAdmin.getAdminName(),secretKey);
        String base64 = QrCodeUtil.generateAsBase64(content, config, "png");
        GoogleAuthDto dto = new GoogleAuthDto();
        dto.setGoogleAuthImg(base64);
        dto.setGoogleAuthSecret(secretKey);
        return dto;
    }
    public SiteAdmin getAdmin(String cookie_name,HttpServletRequest request){
        String logintoken = CookieUtils.readLoginToken(request, cookie_name);
        String adminJson = RedisShardedPoolUtils.get(logintoken);
        return (SiteAdmin) JsonUtil.string2Obj(adminJson, SiteAdmin.class);
    }
    public ServerResponse<PageInfo> listByAdmin(String adminName, String adminPhone, HttpServletRequest request, int pageNum, int pageSize) {