minoString

引入Bcrypt配置

登录操作需要验证密码,需要使用Bcrypt工具类来验证

 
package com.heima.wemedia.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan({"com.heima.common.aliyun","com.heima.common.exception","com.heima.common.knife4j","com.heima.common.bcrypt"})
public class InitConfig {
}

package com.heima.wemedia.service.impl;
  使用BCryptPasswordEncoder提供的方法,比对密码
 boolean b = encoder.matches(userLoginDto.getPassword(), adUser.getPassword()); 

获取登录用户思路分析--从当前线程中获取用户

添加工具类

在使用拦截器解析后的用户id需要放在当前线程中,可以使用工具类来实现,在heima-leadnews-common中添加如下类

package com.heima.common.threadlocal; 
/** 存放用户id的容器 */
public class UserThreadLocalUtils { 
    private final static ThreadLocal<Integer> userThreadLocal = new ThreadLocal<>(); 
    /** 获取线程中的用户   */
    public static Integer getUserId() {
        return userThreadLocal.get();
    } 
    /** 设置当前线程中的用户 @param userId  */
    public static void setUserId(Integer userId) {
        userThreadLocal.set(userId);
    } 
}

在自媒体wemedia微服务中使用拦截器解析header数据并设置到当前线程中

package com.heima.wemedia.interceptors;  
@Slf4j
public class UserInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //得到header中的信息
        String userId = request.getHeader("userId");
        if(StringUtils.isNotBlank(userId)){
            //把用户id存入threadloacl中
            UserThreadLocalUtils.setUserId(Integer.valueOf(userId));
            log.info("UserInterceptor设置用户信息到threadlocal中...");
        } 
        return true;
    }
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        log.info("清理threadlocal...");
        UserThreadLocalUtils.removeUser();
    }
}

配置拦截器 

package com.heima.wemedia.config; 
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new UserInterceptor()).addPathPatterns("/**"); 所有
    }
}

package com.heima.wemedia.controller.v1;  
@RestController
@RequestMapping("/api/v1/material")
public class MaterialController {
    @Autowired
    private WmMaterialService wmMaterialService;
/**  上传文件     */
    @PostMapping("/upload_picture")
    public ResponseResult<String> uploadPic(@RequestParam(name = "multipartFile")MultipartFile file){
        return ResponseResult.ok(wmMaterialService.uploadPicture(file));
    } 
}

package com.heima.wemedia.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.heima.model.common.dtos.ResponseResult;
import com.heima.wemedia.entity.WmMaterial;
import org.springframework.web.multipart.MultipartFile;

public interface WmMaterialService extends IService<WmMaterial> { 

    /* 上传图片String接口*  /
    String uploadPicture(MultipartFile multipartFile); 
}

import@Slf4j
@Service
public class WmMaterialServiceImpl extends ServiceImpl<WmMaterialMapper, WmMaterial> implements WmMaterialService { 
    @Autowired
    private MinioService minioService; 
    @Override
    public String uploadPicture(MultipartFile multipartFile) { 
        Integer userId = UserThreadLocalUtils.getUserId();
        if(userId == null || userId==0){
            throw new LeadException(AppHttpCodeEnum.NEED_LOGIN);
        } 
        String suffix = StringUtils.substringAfterLast(multipartFile.getOriginalFilename(), ".");
//        新的文件名
        String newFileName = UUID.randomUUID().toString() +suffix;
//        上传到minio
        try {
            String url = minioService.uploadImgFile("",newFileName,multipartFile.getInputStream());
//            保存数据库
            WmMaterial wmMaterial = new WmMaterial();
            wmMaterial.setUrl(url);
            wmMaterial.setUserId(userId);
            wmMaterial.setType(0);
            wmMaterial.setIsCollection(false);
            wmMaterial.setCreatedTime(new Date());
            boolean b = save(wmMaterial);
            if(!b){
                throw new LeadException(AppHttpCodeEnum.SERVER_ERROR);
            }
            return url;
        } catch (Exception e) {
            log.error("oss 上传失败!");
            e.printStackTrace();
            throw new LeadException(AppHttpCodeEnum.UPLOAD_ERROR);
        } 
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值