加密BCrypt

BCrypt 在加密过程中会生成一个独特的盐,并将其与密码进行混合。每次加密时,盐都会不同,因此即使原始密码相同,每次加密生成的加密值也会不同。

<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-crypto</artifactId>
</dependency>

package com.heima.common.bcrypt; 
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; 
import java.security.SecureRandom;

@Configuration
public class PasswordConfig { 
    private int seedLength = 32;//随机秘钥的长度
    /** * : 10 # 加密强度4~31,决定了密码和盐加密时的运算次数,超过10以后加密耗时会显著增加  */
    private Integer strength = 10; 
    @Bean
    public BCryptPasswordEncoder passwordEncoder() { 
//      加密前度,数字越大强度越大,越安全,越耗时
        SecureRandom random = new SecureRandom(SecureRandom.getSeed(seedLength));
        return new BCryptPasswordEncoder(strength, random);
    }
}

登录需要验证用户名和密码,这里密码是使用Bcrypt加密的,所以验证的时候也需要使用Bcrypt来验证密码。

在admin服务中引入common中的bcrypt包

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 {
}

package com.heima.admin.controller.v1;
 

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));
    }
}

package com.heima.admin.service;  
public interface AdUserService extends IService<AdUser> { 
    Map<String,Object> login(AdUserLoginDto userLoginDto);
}

package com.heima.admin.service.impl;  
@Slf4j
@Service
public class AdUserServiceImpl extends ServiceImpl<AdUserMapper, AdUser> implements AdUserService {

    @Autowired
    private BCryptPasswordEncoder encoder; 
    @Override
    public Map<String, Object> login(AdUserLoginDto userLoginDto) {
//        构造查询条件
        QueryWrapper<AdUser> queryWrapper = new QueryWrapper<>();
        queryWrapper.lambda().eq(AdUser::getName,userLoginDto.getName());
//        查询
        AdUser adUser = this.getOne(queryWrapper);
        if(adUser == null){
//            如果根据用户名查询不到用户,报错
            throw new LeadException(AppHttpCodeEnum.DATA_NOT_EXIST, "用户不存在");
        }
//        使用BCryptPasswordEncoder提供的方法,比对密码
        boolean b = encoder.matches(userLoginDto.getPassword(), adUser.getPassword());
        if(!b){
//            如果密码不匹配,报错
            throw new LeadException(AppHttpCodeEnum.LOGIN_PASSWORD_ERROR);
        }
//        设置token和用户信息返回
        Map<String,Object> map = new HashMap<>();
        String token = JwtUtils.generateTokenExpireInSeconds(adUser.getId(),3600);
        map.put("token", token);
        AdUserDto adUserDto = BeanHelper.copyProperties(adUser, AdUserDto.class);
        map.put("user",adUserDto);
        return map;
    }
}

@PostMapping("/in")
public ResponseResult in(@Valid @RequestBody AdUserDto dto){
    return adUserService.login(dto);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/6746.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

天命人开店日记之门店经营调研(下)

在调研前拟定了一些想要去了解的信息&#xff0c;包括&#xff1a;月销量、净利润、用户购买的主要担忧、与电商平台的竞争差异等关键内容&#xff0c;然而当自己去实地考察线下门店时&#xff0c;确发现实际情况与自己的预期相差非常大。大大出乎预料的包括三方面&#xff1a;…

桑基图在医学数据分析中的更复杂应用示例

桑基图&#xff08;Sankey Diagram&#xff09;能够有效地展示复杂的流动关系&#xff0c;特别适合用于医学数据分析中的多种转归和治疗路径的可视化。接下来&#xff0c;我们将构建一个稍微复杂的示例&#xff0c;展示不同疾病患者在治疗过程中的流动&#xff0c;以及他们的治…

【linux】再谈网络基础(一)

1. 再谈 "协议" 协议是一种 "约定"&#xff0c;在读写数据时, 都是按 "字符串" 的方式来发送接收的. 但是这里我们会遇到一些问题&#xff1a; 如何确保从网上读取的数据是否是完整的&#xff0c;区分缓冲区中的由不同客户端发来的数据 2. 网…

基于CNN-RNN的影像报告生成

项目源码获取方式见文章末尾&#xff01; 600多个深度学习项目资料&#xff0c;快来加入社群一起学习吧。 《------往期经典推荐------》 项目名称 1.【PaddleNLP的FAQ问答机器人】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【GAN模型实现二次元头像生成】 4.【CNN模型实现…

【AI落地应用实战】构建基于知识图谱的知识问答系统

一、知识图谱概述 知识图谱&#xff08;Knowledge Graph&#xff09;是一种结构化的语义知识库&#xff0c;它以图形的方式组织和整合信息&#xff0c;使得数据之间的关系变得直观和易于理解。知识图谱的概念融合了计算机科学、数据科学、人工智能等多个领域的技术&#xff0c…

微积分复习笔记 Calculus Volume 1 - 4.8 L’Hôpital’s Rule

4.8 L’Hpital’s Rule - Calculus Volume 1 | OpenStax

AI辅助论文写作的利弊

人工智能的时代&#xff0c;AI从自动驾驶到智能家居&#xff0c;慢慢的都成为了我们生活中的一部分。可当AI被放到学术研究领域&#xff0c;特别是撰写论文这一问题上时&#xff0c;却出现了大量的争议&#xff0c;认为AI撰写论文会削弱该有的批判性思维能力。那不用AI撰写论文…

AOP详解

一.什么是 AOP&#xff1f; AOP 的目的是将横切关注点&#xff08;如日志记录、事务管理、权限控制、接口限流、接口幂等等&#xff09;从核心业务逻辑中分离出来&#xff0c;通过动态代理、字节码操作等技术&#xff0c;实现代码的复用和解耦&#xff0c;提高代码的可维护性和…

红队知识学习入门(4)Windows病毒编写

声明 学习视频来自B站UP主 泷羽sec,如涉及侵泷羽sec权马上删除文章笔记的只是方便各位师傅学习知识,以下网站涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负 1、端口号及对应漏洞 ftp:21 tenlnet:23 web:80 80-89:可能是web 443&#xff1a;ssl心脏滴血…

知识竞赛答题系统,线上答题小程序链接怎么做?

随着智能手机的普及&#xff0c;越来越多的单位开始在线上开展知识竞赛。这种形式的知识竞赛不仅易于操作&#xff0c;而且参与度更高。那么线上知识竞赛答题系统怎么做呢&#xff1f;自己可以做吗&#xff1f;答案是可以的&#xff01;借助微信答题系统制作平台风传吧&#xf…

AndroidStudio通过Bundle进行数据传递

作者&#xff1a;CSDN-PleaSure乐事 欢迎大家阅读我的博客 希望大家喜欢 使用环境&#xff1a;AndroidStudio 目录 1.新建活动 2.修改页面布局 代码&#xff1a; 效果&#xff1a; 3.新建类ResultActivity并继承AppCompatActivity 4.新建布局文件activity_result.xml 代…

【网络-交换机】生成树协议、环路检测

路由优先级 路由优先级决定了在多种可达的路由类型中&#xff0c;哪种路由将被用来转发数据包。路由优先级值越低&#xff0c;对应路由的优先级越高&#xff0c;优先级值255表示对应的路由不可达。一般情况下&#xff0c;静态路由的优先级为1&#xff0c;OSPF路由优先级为110&a…

华为eNSP:mux-vlan

一、什么是mux-vlan&#xff1f; Mux-vlan 是一种多路复用的虚拟局域网&#xff08;Virtual Local Area Network&#xff09;技术。它将多个不同的VLAN流量转发到同一个物理端口&#xff0c;从而实现VLAN间的互通。 在传统的以太网环境中&#xff0c;每个VLAN通常都有一个独立…

又发现了Mac妙控鼠标的新使用方法

我一直是不爱用妙控鼠标的&#xff0c;因为用起来怪怪的&#xff0c;但是今天发现BettreAndBetter支持妙控鼠标的修改&#xff0c;于是就找出了闲置了许久的妙控鼠标试了一下 优化后的妙控鼠标使用起来就没有任何不适应的地方了&#xff0c;三指按下模拟中键&#xff0c;而且还…

Cursor编程工具

最近爆火的Cursor是一款基于 VS Code 二次开发的 AI 编辑器。相比传统编辑器&#xff0c;它将 AI 技术深度融合到各个功能点&#xff0c;带来了前所未有的用户体验。 下载链接&#xff1a;https://www.cursor.com/ 第一步&#xff1a;下载安装 下载完成后&#xff0c;双击启动…

Me-LLaMA——用于医疗领域的新型开源大规模语言模型

摘要 大规模语言模型的出现是提高病人护理质量和临床操作效率的一个重大突破。大规模语言模型拥有数百亿个参数&#xff0c;通过海量文本数据训练而成&#xff0c;能够生成类似人类的反应并执行复杂的任务。这在改进临床文档、提高诊断准确性和管理病人护理方面显示出巨大的潜…

鸿蒙ArkTS中的布局容器组件(Column、Row、Flex、 Stack、Grid)

在鸿蒙ArkTS中&#xff0c;布局容器组件有很多&#xff0c;常见的有&#xff1a;   ⑴ Column&#xff1a;&#xff08;垂直布局容器&#xff09;&#xff1a;用于将子组件垂直排列。   ⑵ Row&#xff1a;&#xff08;水平布局容器&#xff09;&#xff1a;用于将子组件水…

【点击劫持漏洞(附测试代码)】

漏洞描述 点击劫持&#xff08;Clickjacking&#xff09;是一种网络攻击技术&#xff0c;攻击者通过将一个恶意的页面或按钮隐藏在合法网站的页面下&#xff0c;诱使用户在不知情的情况下点击隐藏的内容&#xff0c;从而触发攻击者设计的操作。这种攻击通常会导致用户无意中执…

大数据新视界 -- 大数据大厂之经典案例解析:电商企业如何靠 Impala性能优化逆袭(上)(9/30)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

语音 AI 迎来爆发期,也仍然隐藏着被低估的机会丨RTE2024 音频技术和 Voice AI 专场

在人工智能快速发展的今天&#xff0c;语音交互技术正经历一场革命性的变革。从语音识别到语音合成&#xff0c;再到端到端的语音对话系统&#xff0c;这一领域的创新正以前所未有的速度推进。这些进步不仅提升了技术指标&#xff0c;更为实时翻译、虚拟数字人、智能客服等实时…