ad_user 运营平台用户信息表
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class AdUser extends Model<AdUser> {}
1在admin服务中引入common中的bcrypt包
```js
package com.heima.admin.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
/**
* 初始化配置
*/
@Configuration
@ComponentScan({"com.heima.common.knife4j","com.heima.common.exception","com.heima.common.bcrypt"})
public class InitConfig {
}
2### admin.controller.v1新建AdLoginController
package com.heima.admin.controller.v1;
import com.heima.admin.entity.AdUserLogin;
import com.heima.admin.service.AdUserService;
import com.heima.common.dtos.ResponseResult;
import com.heima.model.admin.dtos.AdUserLoginDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid;
import java.util.Map;
@RestController
public class AdLoginController {
@Autowired
private AdUserService adUserService;
/**
* 管理平台用户登录
* @param userLoginDto
* @return
*/
@PostMapping("/login/in")
public ResponseResult<Map<String,Object>> login(@Valid @RequestBody AdUserLoginDto userLoginDto){
return ResponseResult.ok(adUserService.login(userLoginDto));
}
}
3### service
package com.heima.admin.service;
import com.heima.admin.entity.AdUser;
import com.baomidou.mybatisplus.extension.service.IService;
import com.heima.admin.entity.AdUserLogin;
import com.heima.model.admin.dtos.AdUserLoginDto;
import java.util.Map;
public interface AdUserService extends IService<AdUser> {
Map<String,Object> login(AdUserLoginDto userLoginDto);
}
4实现类--需要注入BCryptPasswordEncoder来验证密码
package com.heima.admin.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.heima.admin.entity.AdUser;
import com.heima.admin.mapper.AdUserMapper;
import com.heima.admin.service.AdUserService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.heima.common.enums.AppHttpCodeEnum;
import com.heima.common.exception.LeadException;
import com.heima.common.util.BeanHelper;
import com.heima.common.util.JwtUtils;
import com.heima.model.admin.dtos.AdUserLoginDto;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.Map;
/**
* <p>
* 管理员用户信息表 服务实现类
* </p>
*
* @author HM
* @since 2024-04-18
*/
@Slf4j
@Service
public class AdUserServiceImpl extends ServiceImpl<AdUserMapper, AdUser> implements AdUserService {
@Autowired
private BCryptPasswordEncoder encoder;
@Override
public Map<String, Object> login(AdUserLoginDto adUserLoginDto) {
// 构造查询条件
QueryWrapper<AdUser> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(AdUser::getName,adUserLoginDto.getName());
AdUser adUser = this.getOne(queryWrapper);
if(adUser == null){
// 如果根据用户名查询不到用户,报错
throw new LeadException(AppHttpCodeEnum.DATA_NOT_EXIST);
}
// 使用BCryptPasswordEncoder提供的方法,比对密码
boolean b = encoder.matches(adUserLoginDto.getPassword(), adUser.getPassword());
if(!b){
// 如果密码不匹配,报错
throw new LeadException(AppHttpCodeEnum.LOGIN_PASSWORD_ERROR);
}
//生成token ,expire过期时间
String token = JwtUtils.generateTokenExpireInSeconds(adUser.getId(),3600);
//因为返给前端的是map 构造返回对象 设置token和用户信息返回
//aduser里面没有敏感数据
//Map<String, Object> map = new HashMap<>();
//map.put(token, token);
//map.put("user",adUser);
//aduser里面有敏感数据,不把敏感数据返回给用户
//创建一个dto,把adUser拷贝到AdUserLoginDto,UserLoginDto传给user
Map<String, Object> map = new HashMap<>();
map.put(token, token);
AdUserLoginDto UserLoginDto = BeanHelper.copyProperties(adUser, AdUserLoginDto.class);
map.put("user",UserLoginDto);
return map;
}
}