code8登录

51 阅读1分钟
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;
    }
}