Skip to content

Latest commit

 

History

History
101 lines (68 loc) · 3.51 KB

执行流程.md

File metadata and controls

101 lines (68 loc) · 3.51 KB

执行流程

  1. 获取用户角色信息

    入参格式:{"username":"curadmin","deptId":"370202000000","sysCode":"1","gmsfhm":" ","rybh":"0111"}

image-20210901164301649

  1. 认证逻辑,username就是UserDetails对象中的username

image-20210901164545682

  1. 查询系统用户,走的是有参的info查询

    image-20210901165210078

image-20210901164645534

  1. 构建userdetail(项目中的实现类为PigxUser)并根据角色授权,构建userdetail对象的username为user.getUsername()+"-"+user.getUserId()+"-"+info.getRoles()[0];

    image-20210901165929636

    	/**
    	 * 构建userdetails
    	 *
    	 * @param result 用户信息
    	 * @return
    	 */
    	private UserDetails getUserDetails(R<UserInfo> result) {
    		if (result == null || result.getData() == null) {
    			throw new UsernameNotFoundException("用户不存在");
    		}
    
    		UserInfo info = result.getData();
    		Set<String> dbAuthsSet = new HashSet<>();
    		if (ArrayUtil.isNotEmpty(info.getRoles())) {
    			// 获取角色
    			Arrays.stream(info.getRoles()).forEach(roleId -> dbAuthsSet.add(SecurityConstants.ROLE + roleId));
    			// 获取资源
    			dbAuthsSet.addAll(Arrays.asList(info.getPermissions()));
    
    		}
    		Collection<? extends GrantedAuthority> authorities
    				= AuthorityUtils.createAuthorityList(dbAuthsSet.toArray(new String[0]));
    		UserVO user = info.getSysUser();
    		boolean enabled = StrUtil.equals(user.getLockFlag(), CommonConstants.STATUS_NORMAL);
    		// 构造security用户
    		String key = user.getUsername()+"-"+user.getUserId()+"-"+info.getRoles()[0];
    		return new PigxUser(user.getUserId(), user.getDeptId(), user.getDeptName(), user.getTenantId(), key, SecurityConstants.BCRYPT + user.getPassword(),user.getTruename(), enabled,
    				true, true, !CommonConstants.STATUS_LOCK.equals(user.getLockFlag()), authorities);
    	}

image-20210901171506831

认证结果

image-20210901171900513

执行无参info方法,可以理解为认证通过后再去数据库里获取一次用户信息

	/**
	 * 获取当前用户全部信息
	 *
	 * @return 用户信息
	 */
	@GetMapping(value = {"/info"})
	public R info() {
		PigxUser pu = SecurityUtils.getUser();
		String username = SecurityUtils.getUser().getUsername();
		String[] usernameStr = username.split("-");
		SysUser user = userService.getOne(Wrappers.<SysUser>query().lambda()
				.eq(SysUser::getUserId, usernameStr[1]) );
		if (user == null) {
			return R.failed(null, "获取当前用户信息失败");
		}
		return R.ok(userService.findUserInfo(user,usernameStr[2]));
	}

image-20210901172247747

排查结果

程序不存在问题,是操作的问题。只有登录信息填写的不对才会去创建新账号,而后出现角色退化是因为登录信息传的就是普通用户。