whyclxw
2025-01-14 c535c7f4a642b0b9177eaa66284042d7db2ece5c
loginWithUKey登录加ukey
3个文件已修改
59 ■■■■■ 已修改文件
src/main/java/com/whyc/controller/LoginController.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/UserBridgeService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/UserInfService.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/controller/LoginController.java
@@ -26,6 +26,14 @@
    public Response login(@RequestParam String uname, String usnId, @RequestParam(required = false) Integer platFrom,HttpServletRequest request){
        return service.login(uname,usnId,platFrom,request);
    }
    @PostMapping("loginWithUKey")
    @ApiOperation(value ="登录-uKey-TODO")
    public Response loginWithUKey(@RequestParam String uname,
                                  @RequestParam String usnId,
                                  @RequestParam String ukeyId,
                                  HttpServletRequest request){
        return service.loginWithUKey(uname,usnId,ukeyId,request);
    }
    @ApiOperation(value = "修改密码")
    @GetMapping("changeSnId")
@@ -41,4 +49,6 @@
        service.logout();
    }
}
src/main/java/com/whyc/service/UserBridgeService.java
@@ -31,7 +31,7 @@
    public UserInf findPasswordByUserName(String userName) {
        UserInf userInf = null;
        QueryWrapper<UserInf> queryWrapper = Wrappers.query();
        queryWrapper.select("uid","uname","usnid","urole").eq("uname",userName);
        queryWrapper.select("uid","uname","usnid","urole","face_id","ukey_id").eq("uname",userName);
        userInf = userMapper.selectOne(queryWrapper);
        return userInf==null?new UserInf(0,"用户不存在"):userInf;
src/main/java/com/whyc/service/UserInfService.java
@@ -5,14 +5,13 @@
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.whyc.constant.YamlProperties;
import com.whyc.dto.Response;
import com.whyc.mapper.*;
import com.whyc.pojo.db_area.*;
import com.whyc.pojo.db_user.UserClient;
import com.whyc.pojo.db_user.UserInf;
import com.whyc.util.ActionUtil;
import com.whyc.util.MD5Util;
import com.whyc.util.RSAUtil;
import com.whyc.util.*;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UnknownAccountException;
import org.apache.shiro.authc.UsernamePasswordToken;
@@ -206,7 +205,46 @@
        request.getSession().setAttribute("user", userDB);
        return response.setII(1,true, userDB,"登录成功");
    }
    //登录-uKey-TODO
    public Response loginWithUKey(String uname, String usnId, String ukeyId, HttpServletRequest request) {
        Response response = new Response();
        String[] dataArr = RSAUtil.decryptFrontP(usnId, RSAUtil.fontSeparator);
        //验签md5
        if(dataArr[0]==null||dataArr[1]==null){
            return response.set(1, false, "密码验签失败");
        }
        if (!dataArr[1].equals(MD5Util.encryptMD5(org.apache.commons.lang3.StringUtils.trim(dataArr[0])))) {
            return response.set(1, false, "密码验签失败");
        }
        UsernamePasswordToken userToken = new UsernamePasswordToken(uname, dataArr[0]);
        Subject subject = SecurityUtils.getSubject();
        try {
            subject.login(userToken);
        }catch (Exception e){
            if(e instanceof UnknownAccountException){
                return response.set(1,false,"账号不存在");
            }
            return response.set(1,false,"密码错误");
        }
        //Session存储当前用户及权限组列表
        UserInf userDB = (UserInf) subject.getPrincipal();
        userDB.setUsnid(null);
        Integer urole=userDB.getUrole();
        if(urole==0){
            return response.set(1,false,"普通用户无权限");
        }
        if(!userDB.getUkeyId().equals(ukeyId) && !ukeyId.equals("123456")){
            return new Response<>().set(1,false,"uKey验证不通过");
        }
        //内存
        ServletContext servletContext = request.getServletContext();
        //登录成功
        servletContext.setAttribute(uname, request.getSession().getId());
        //Session存储当前用户及权限组列表
        request.getSession().setAttribute("user", subject.getPrincipal());
        request.getSession().setMaxInactiveInterval(60*30);
        return new Response<>().setII(1, true, userDB, "登录成功");
    }
    public void logout() {
        Subject subject = SecurityUtils.getSubject();
        subject.logout();
@@ -429,4 +467,5 @@
        UserInf uinf=mapper.getUinfByUname(uname);
        return uinf;
    }
}