whycxzp
2022-12-12 ad36f81fec7666c96fcaec6fd38743be56195ac8
伪单点登录提交
1个文件已添加
4个文件已修改
191 ■■■■■ 已修改文件
src/main/java/com/whyc/controller/UserController.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/mapper/UserPermitGroupDataMapper.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/pojo/UserPermitGroup.java 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/UserService.java 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/UserPermitGroupDataMapper.xml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/controller/UserController.java
@@ -235,6 +235,10 @@
        return new Response().set(1,list);
    }
    @ApiOperation(value = "伪单点登录",notes = "返回的data为布尔值,是否登录成功;data2:用户所在的权限组id;data3为用户对象,内含属性uid,uname,urole")
    @GetMapping("loginByUId")
    public Response searchSnIdByUId(@RequestParam int uId){
        return userService.loginByUId(uId);
    }
}
src/main/java/com/whyc/mapper/UserPermitGroupDataMapper.java
@@ -1,6 +1,11 @@
package com.whyc.mapper;
import com.whyc.pojo.UserPermitGroup;
import com.whyc.pojo.UserPermitGroupData;
import java.util.List;
public interface UserPermitGroupDataMapper extends CustomMapper<UserPermitGroupData> {
    List<UserPermitGroup> getPermitGroupListByUId(int uId);
}
src/main/java/com/whyc/pojo/UserPermitGroup.java
New file
@@ -0,0 +1,57 @@
package com.whyc.pojo;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import org.apache.ibatis.type.Alias;
@ApiModel("权限组")
@Alias("UserPermitGroup")
@TableName(schema = "db_user",value = "tb_user_permitgroup")
public class UserPermitGroup {
    private Long num;
    private Integer permitGroupId;
    private String permitGroupName;
    private String permitItemName;
    private Integer permitItemValue;
    public Long getNum() {
        return num;
    }
    public void setNum(Long num) {
        this.num = num;
    }
    public Integer getPermitGroupId() {
        return permitGroupId;
    }
    public void setPermitGroupId(Integer permitGroupId) {
        this.permitGroupId = permitGroupId;
    }
    public String getPermitGroupName() {
        return permitGroupName;
    }
    public void setPermitGroupName(String permitGroupName) {
        this.permitGroupName = permitGroupName;
    }
    public String getPermitItemName() {
        return permitItemName;
    }
    public void setPermitItemName(String permitItemName) {
        this.permitItemName = permitItemName;
    }
    public Integer getPermitItemValue() {
        return permitItemValue;
    }
    public void setPermitItemValue(Integer permitItemValue) {
        this.permitItemValue = permitItemValue;
    }
}
src/main/java/com/whyc/service/UserService.java
@@ -1,20 +1,20 @@
package com.whyc.service;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.whyc.constant.UserConstant;
import com.whyc.constant.YamlProperties;
import com.whyc.dto.Response;
import com.whyc.mapper.BaoJiGroupUserMapper;
import com.whyc.mapper.UserMapper;
import com.whyc.mapper.UserPermitGroupDataMapper;
import com.whyc.pojo.BaoJiGroupUser;
import com.whyc.pojo.UserClient;
import com.whyc.pojo.UserInf;
import com.whyc.pojo.UserPermitGroupData;
import com.whyc.pojo.*;
import com.whyc.util.ActionUtil;
import com.whyc.util.CommonUtil;
import com.whyc.util.RSAUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@@ -23,13 +23,11 @@
import javax.annotation.Resource;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.security.InvalidParameterException;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
@Service
@Slf4j
@@ -351,4 +349,106 @@
        List<UserInf> list = userMapper.getUserInfoByStationId(stationId);
        return list;
    }
    public Response loginByUId(int uId) {
        Response<Object> response = new Response<>();
        response.setCode(1);
        response.setData(false);
        //查询对应的用户
        QueryWrapper<UserInf> query = Wrappers.query();
        query.select("uId","uName","uSnId","upassword","unote","UKey_ID","uRole","password_update_time","status","visit_time","visit_ip")
                .eq("uId",uId).last(" limit 1");
        UserInf userInf = userMapper.selectOne(query);
        if(userInf == null){
            response.setMsg("对应的用户不存在");
        }else{
            //判断用户状态
            if(userInf.getStatus()!=1){
                switch (userInf.getStatus()){
                    case 0: response.setMsg("当前账号的状态异常,无法登录. 异常信息为: "+UserConstant.ACCOUNT_STATUS_CANCEL.getLabel());break;
                    case 2: response.setMsg("当前账号的状态异常,无法登录. 异常信息为: "+UserConstant.ACCOUNT_STATUS_HIBERNATE.getLabel());break;
                    case 3: response.setMsg("当前账号的状态异常,无法登录. 异常信息为: "+UserConstant.ACCOUNT_STATUS_LOCK.getLabel());break;
                    case 4: response.setMsg("当前账号的状态异常,无法登录. 异常信息为: "+UserConstant.ACCOUNT_STATUS_LOCK_FAIL.getLabel());break;
                    default:response.setMsg("当前账号的状态异常,无法登录. 异常信息为: 无");
                }
                return  response;
            }
            //判断是否为国网系统,校验密码是否3个月修改过一次
            if(1 == YamlProperties.systemType){
                //登录之前,首先校验允许时间和登录ip
                boolean ipPass = true;
                String firstTime = userInf.getVisitTime().split("~")[0];
                String lastTime = userInf.getVisitTime().split("~")[1];
                List<String> ipRules = new LinkedList<>();
                String ipRuleStr = userInf.getVisitIp();
                ipRules = Arrays.asList(ipRuleStr.split(","));
                Calendar instance = Calendar.getInstance();
                String hourOfDay = String.format("%1$02d",instance.get(Calendar.HOUR_OF_DAY));
                int minute = instance.get(Calendar.MINUTE);
                int second = instance.get(Calendar.SECOND);
                String nowTime = hourOfDay+":"+minute+":"+second;
                //登录时间校验
                if(nowTime.compareTo(firstTime)>=0 && nowTime.compareTo(lastTime)<=0){
                    //登录ip校验
                    String clientIp = ActionUtil.getRequest().getRemoteAddr();
                    if(!ipRules.contains("*")){
                        for(String ipRule:ipRules){
                            ipPass = true;
                            //ip规则格式为 * 或者 xxx.xxx.x.x
                            String[] ipArr = clientIp.split("\\.");
                            String[] ipRuleArr = ipRule.split("\\.");
                            for (int i = 0; i < ipRuleArr.length; i++) {
                                if(!ipRuleArr[i].equals("*") && !ipRuleArr[i].equals(ipArr[i])){
                                    ipPass = false;
                                    break;
                                }
                            }
                            if(ipPass){
                                break;
                            }
                        }
                    }
                    if(!ipPass){
                        return response.set(1,false,"您的IP禁止访问,请知晓");
                    }
                }else{
                    return response.set(1,false,"登录时间不在允许的时间范围内");
                }
            }
            //校验通过,登录成功
            {
                response.setData(true);
                //查询用户对应的权限组id并返回给前端
                QueryWrapper<UserPermitGroupData> query2 = Wrappers.query();
                query2.select("permit_group_id").eq("uId",uId).last(" limit 1");
                UserPermitGroupData userPermitGroupData = permitMapper.selectOne(query2);
                response.setData2(userPermitGroupData.getPermitGroupId());
                //将登陆成功的用户存入session
                HttpSession session = ActionUtil.getSession();
                session.setAttribute("user",userInf);
                session.setAttribute("ip",ActionUtil.getRequest().getRemoteAddr());
                List<UserPermitGroup> permitGroupList = permitMapper.getPermitGroupListByUId(uId);
                if(permitGroupList!=null && permitGroupList.size()>0){
                    session.setAttribute("permits", ActionUtil.tojson(permitGroupList));
                }else{
                    response.setMsg("还未分配权限");
                    return response;
                }
                //将新登录的用户存入application
                setApplication(userInf);
                //特定的用户信息返回
                UserInf userDto = new UserInf();
                userDto.setUId(userInf.getUId());
                userDto.setURole(userInf.getURole());
                userDto.setUName(userInf.getUName());
                response.setData3(userDto);
            }
        }
        return response;
    }
}
src/main/resources/mapper/UserPermitGroupDataMapper.xml
@@ -3,4 +3,11 @@
<mapper namespace="com.whyc.mapper.UserPermitGroupDataMapper" >
    <select id="getPermitGroupListByUId" resultType="com.whyc.pojo.UserPermitGroup">
        select  tb_user_permitgroup.num,permit_group_name,permit_item_name,permit_item_value
        from db_user.tb_user_permitgroup,db_user.tb_user_permitgroup_data
        where tb_user_permitgroup.permit_group_id=tb_user_permitgroup_data.permit_group_id
        and tb_user_permitgroup_data.uId=#{uId}
        and tb_user_permitgroup.permit_item_value=1
    </select>
</mapper>