1. LoginUser 类: 继承 UserDetails , 建立属性:
private String type;
private CCompanyUserDto cCompanyUserDto;

// 重写 LoginUser 函数
@Override
public String getPassword() {
	if (user != null) {
		return user.getPassword();
	} else if (cCompanyUserDto != null) {
		return cCompanyUserDto.getPassword();
	}
	return null;
}

@Override
public String getUsername() {
	if (user != null) {
		return user.getUserName();
	} else if (cCompanyUserDto != null) {
		return cCompanyUserDto.getUsername();
	}
	return null;
}

2.LoginBody 加字段

//类型:cp or company
private String type;

3.SysLoginService.login(加String type参数)

new UsernamePasswordAuthenticationToken(username + "@@@" + type, password)

4.SysUserMapper 类与 xml写:

public CompAdminDto selectCompAdmin(String username);
	
	<!-- 其实不符合规范,为了统一登录代码写这里 -->
	<select id="selectCompAdmin" parameterType="String" resultType="com.ruoyi.common.core.domain.entity.CompAdminDto">
		SELECT * from comp_admin t where t.USERNAME= #{username}
	</select>

5.UserDetailsServiceImpl.loadUserByUsername 修改:

String[] unames = username.split("@@@");
username = unames[0];
String type = unames[1];

// 企业登录
if ("company".equals(type)) {
    CompAdminDto adminDto = userMapper.selectCompAdmin(username);
    if (adminDto != null) {
        return createLoginUser(adminDto);
    }
    throw new UsernameNotFoundException("登录用户:" + username + " 不存在");
}

UserDetailsServiceImpl新建函数:

public UserDetails createLoginUser(CompAdminDto adminDto) {
       LoginUser loginUser = new LoginUser();
       loginUser.setType("company");
       loginUser.setAdminDto(adminDto);
       return loginUser;
   }
Logo

快速构建 Web 应用程序

更多推荐