跟着JHipster学做项目 (14) 账户激活与密码重置

EDA的未来:当AI与Cadence Virtuoso相遇 本文探讨了AI技术与Cadence Virtuoso在EDA领域的融合,展示了如何通过生成式AI提升芯片设计效率。文章详细分析了Virtuoso设计环境的智能化演进、AI驱动的设计辅助功能实现路径,以及SKILL语言的进化方向,为工程师提供了未来EDA工具的发展趋势和实用案例。 阅读详情

在JHipster项目中,用户使用邮箱进行注册,注册成功后将发送账户激活链接到邮箱,用户点击链接后,激活成功。

AccountResource类代码:

    /**
     * {@code POST  /register} : register the user.
     *
     * @param managedUserVM the managed user View Model.
     * @throws InvalidPasswordException {@code 400 (Bad Request)} if the password is incorrect.
     * @throws EmailAlreadyUsedException {@code 400 (Bad Request)} if the email is already used.
     * @throws LoginAlreadyUsedException {@code 400 (Bad Request)} if the login is already used.
     */
    @PostMapping("/register")
    @ResponseStatus(HttpStatus.CREATED)
    public void registerAccount(@Valid @RequestBody ManagedUserVM managedUserVM) {
        if (isPasswordLengthInvalid(managedUserVM.getPassword())) {
            throw new InvalidPasswordException();
        }
        User user = userService.registerUser(managedUserVM, managedUserVM.getPassword());
        mailService.sendActivationEmail(user);
    }

UserService类代码:

    public User registerUser(AdminUserDTO userDTO, String password) {
        userRepository
            .findOneByLogin(userDTO.getLogin().toLowerCase())
            .ifPresent(
                existingUser -> {
                    boolean removed = removeNonActivatedUser(existingUser);
                    if (!removed) {
                        throw new UsernameAlreadyUsedException();
                    }
                }
            );
        userRepository
            .findOneByEmailIgnoreCase(userDTO.getEmail())
            .ifPresent(
                existingUser -> {
                    boolean removed = removeNonActivatedUser(existingUser);
                    if (!removed) {
                        throw new EmailAlreadyUsedException();
                    }
                }
            );
        User newUser = new User();
        String encryptedPassword = passwordEncoder.encode(password);
        newUser.setLogin(userDTO.getLogin().toLowerCase());
        // new user gets initially a generated password
        newUser.setPassword(encryptedPassword);
        newUser.setFirstName(userDTO.getFirstName());
        newUser.setLastName(userDTO.getLastName());
        if (userDTO.getEmail() != null) {
            newUser.setEmail(userDTO.getEmail().toLowerCase());
        }
        newUser.setImageUrl(userDTO.getImageUrl());
        newUser.setLangKey(userDTO.getLangKey());
        // new user is not active
        newUser.setActivated(false);
        // new user gets registration key
        newUser.setActivationKey(RandomUtil.generateActivationKey());
        Set<Authority> authorities = new HashSet<>();
        authorityRepository.findById(AuthoritiesConstants.USER).ifPresent(authorities::add);
        newUser.setAuthorities(authorities);
        userRepository.save(newUser);
        log.debug("Created Information for User: {}", newUser);
        return newUser;
    }

这里两个关键User字段:activated, activationKey,在User实体类中activated属于必需属性,而activationKey则属于临时属性,JHipster采用@JsonIgnore进行注解,当进行序列化或者反序列化时,Pojo对象将不转换该属性信息。如下:

private boolean activated = false;

    @Size(min = 2, max = 10)
    @Field("lang_key")
    private String langKey;

    @Size(max = 256)
    @Field("image_url")
    private String imageUrl;

    @Size(max = 20)
    @Field("activation_key")
    @JsonIgnore
    private String activationKey;

    @Size(max = 20)
    @Field("reset_key")
    @JsonIgnore
    private String resetKey;

    @Field("reset_date")
    private Instant resetDate = null;

用户点击邮件中的链接,例如:

http://127.0.0.1:9000/account/activate?key=5RfmrcsxqxbgoBg2GGjq

后端会根据key值进行校验,代码如下:

    public Optional<User> activateRegistration(String key) {
        log.debug("Activating user for activation key {}", key);
        return userRepository
            .findOneByActivationKey(key)
            .map(
                user -> {
                    // activate given user for the registration key.
                    user.setActivated(true);
                    user.setActivationKey(null);
                    userRepository.save(user);
                    log.debug("Activated user: {}", user);
                    return user;
                }
            );
    }

根据同样原理,当用户需要重置密码时,用户填写注册时使用的邮箱并提交重置密码请求,系统会发送包含密码重置链接邮件:

http://127.0.0.1:9000/account/reset/finish?key=F6WMyIwMSeGzY4E9TxS3

点击链接后,显示填写重置密码的页面,提交后系统根据key进行查询,并且限制链接24小时内有效,代码如下:

    public Optional<User> completePasswordReset(String newPassword, String key) {
        log.debug("Reset user password for reset key {}", key);
        return userRepository
            .findOneByResetKey(key)
            .filter(user -> user.getResetDate().isAfter(Instant.now().minusSeconds(86400)))
            .map(
                user -> {
                    user.setPassword(passwordEncoder.encode(newPassword));
                    user.setResetKey(null);
                    user.setResetDate(null);
                    userRepository.save(user);
                    return user;
                }
            );
    }

Good Luck,

Cheers!

把 ABAP ALV 表头做成两层分组:用 TOP-OF-PAGE 手工绘制双行列标题 摘要:本文介绍了在SAP ALV List中实现双层表头的方法。通过关闭系统默认列标题(no_colhead='X'),在TOP_OF_PAGE事件中手动绘制表头,使用sy-uline和sy-vline绘制线条实现分组效果。关键点包括:1)关闭系统表头;2)在事件处理中分两行输出分组标题和字段名;3)利用系统自动拼接线条的特性绘制表格边框。文中还指出了常见问题如线条自动粘连、颜色不生效等,并提供了完整示例代码和详细解释。这种方法适用于需要对字段进行业务分组的报表场景。 阅读详情

相关推荐

无刷直流电机矢量控制(四):基于滑模观测器的无传感器控制

无刷直流电机矢量控制,采用转速、电流双环控制,电流环dq解耦,d轴采用id=0控制,q轴采用转速外环。采用滑模观测器(SMO),根据电压电流信息进行电机位置角度动态估算,模型可直接运行,转速和角度跟踪精度较高。 本文整理了该方法的基本原理,介绍了在MATLAB/Simulink中的建模和仿真过程,最后附上完整的模型文件。 一、基本原理 滑模观测器(下文简称SMO)是基于滑模变结构控制方法的一种状态观测器。其针对无刷直流电机转子位置估算的实现过程如下。 假设采用矢量控...

Forster-C的博客 6865

JHipster技术栈理解 - UAA原理分析

本文简要分析了UAA的认证机制和部分源码功能。 UAA全称User Account and Authentication。 相关源码都是通过Jhipster生成,包括UAA,Gateway,Identity。Jhipster简介请参考这里。 1 OAuth2认证模式 1.1 密码模式 密码模式(Resource Owner Password Credentials)中,用户向客户端提供自己的用...

weixin_34146410的博客 775

ENSP内使用wireshark进行抓包,并且解析icmp报文

前四位:54 89 98 e8 20 38 为ip报文包的mac地址也就是物理地址。一开始进行抓包是没有icmp报文的,需要我们在ensp中使用pc1请求联通pc9。协议编号后分别为:ip版本、ip首部报文长度、服务类型、ip报文总长度。最后为校验和 、源ip地址、目的ip、从08 00开始为真正的数据。我们需要实验的端口为:0/0/4,也就是抓包第三个交换机内的报文。其中显示的icmp报文就是我们需要解析的ip报文。源mac地址后跟着的就是协议编号: 08 00。根据ip报文包的结构我们进行解析。

2301_81713278的博客 2138

Jhipster 学习

Jhipster 学习认识JhipsteJhipste安装1. Node.js 升级与安装。2.Yeoman安装。3.Jhipste安装Angular + Spring Boot应用 认识Jhipste Jhipste安装 1. Node.js 升级与安装。 Jhipste的官网最新的Jhipste要求node.js是16.LTS。而大部分都是10、12这就需要升级。如果是windows下安装的node.js就不能通过npm install npm -g命令升级我踩过坑。我们需要到官网下载最新的版本,通过安

qq_40378508的博客 1239

TSP、MTSP问题遗传算法详细解读及python实现

写在前面 遗传算法是一种求解NPC问题的启发式算法,属于仿生进化算法族的一员。仿生进化算法是受生物行为启发而发明的智能优化算法,往往是人们发现某种生物的个体虽然行为较为简单,但生物集群通过某种原理却能表现出智能行为。于是不同的人研究不同的生物行为原理,受到启发而发明出新的仿生进化算法。比如免疫优化算法,蚁群算法,模拟退火算法等,这些算法以后也会简单介绍。 本文的主题是遗传算法,该算法也是受到生物行为启发。物竞天择,适者生存,优胜劣汰,是该优化算法的核心思想。笔者在业务中需要用到遗传算法求解TSP问题,但是网

weixin_47675950的博客 9305

腾讯云TDSQL MySQL版 - 开发指南兼容性

语言结构 分布式实例支持所有 MySQL 使用的文字格式,包括: String Literals Numeric Literals Date and Time Literals Hexadecimal Literals Bit-Value Literals Boolean Literals NULL Values String Literals String Literals 是一个 bytes 或者 characters 的序列,两端被单引号'或者双引号"包围,TDSQL MySQL版

weixin_43872058的博客 908

JAVA项目:用户界面——修改密码+上传图片头像(mysql)

此DEMO包含一下功能 用户界面(显示头像、学号、电话号码、性别) 修改密码(密码检验+两次密码是否一致的检验) 上传头像(这里采用的是先用io流将图片传到工程文件下,把图片路径保存到数据库中) 用户界面 用户界面 customerUI.jsp <%@ page contentType="text/html;charset=UTF-8" %> <html lang="en"> <head> <meta charset="UTF-8"> &

立志成为炼丹师? 4036

手把手教你学simulink(40.1)--水力发电场景示例:基于 Simulink 的抽水蓄能电站水力发电

项目背景抽水蓄能电站是一种重要的储能技术,广泛应用于电力系统的调峰填谷、频率调节和备用电源。它通过在电力负荷低谷时将水从下水库抽到上水库储存,在电力负荷高峰时释放水进行发电,从而实现电能的高效利用。与传统的水电站不同,抽水蓄能电站可以在短时间内快速响应电网的需求,具有良好的灵活性和可靠性。本项目旨在使用 MATLAB/Simulink 模拟一个完整的抽水蓄能电站的水力发电过程,包括水泵-涡轮机系统、发电机、水道系统、控制系统等,并实现对电站的精确控制,确保其在不同工况下都能稳定运行。

MHD0815的博客 885

BCryptPasswordEncoder的使用及原理

当时看到使用BCryptPasswordEncoder时,同样的密码可以生成不同的密文而且还可以通过matches方法进行匹配验证,觉得很神奇。后来经过调试发现,密文中本身包含了很多信息,包括salt和使用salt加密后的hash。因为每次的salt不同,因此每次的hash也不同。这样就可以使得相同的明文生成不同的密文,而密文中包含salt和hash,因此验证过程和生成过程也是相同的。附一张大致的调用关系流程图,供大家参考。https。...

m0_67391121的博客 1140

【干货分享】高通 SA8295P PCB 设计规范指南

高通SA8295P芯片是第四代骁龙汽车数字座舱平台的核心组件,采用5nm工艺,集成高性能CPU/GPU和30TOPS算力的NPU。文章详细介绍了该芯片各接口的layout设计规范,包括USB3.1/2.0、eDP/DP、MIPI CSI/DSI、PCIe Gen3等接口的阻抗、损耗、延时等关键指标要求,为新能源汽车电子设计提供重要参考。

一只豌豆象的博客 260

医图论文 Arxiv‘24 | 自我先验引导的 Mamba-UNet 网络在医学图像超分辨率中的应用

作者提出了一种自我先验引导的 Mamba-UNet 网络(简称 SMamba-UNet)用于医学图像超分辨率。现有方法主要基于卷积神经网络(CNNs)或 Transformer。基于 CNN 的方法无法捕捉长距离依赖关系,而基于 Transformer 的方法由于其二阶计算复杂度,面临沉重的计算挑战。最近,状态空间模型(SSMs)尤其是 Mamba 出现了,它能够以线性计算复杂度建模长距离依赖。

小白学视觉 261

JHipster入门初体验

JHipster入门 前言 微服务是真的太吃电脑配置了,我们电脑16g内存,5个微服务基本干完了,当然idea也占了不少内存。电脑配置不是很行的要谨慎。 JHipster创建registry Jhipster Registry 简介 JHipster registry是一个运行时应用程序,由JHipster团队提供。与JHipster生成器一样,它是一个开源的、apache2许可的应用程序,它的源代码可以在JHipster组织的GitHub上找到,地址是 jhipster/jhipster-registry

CoderMy的博客 1056

(一)深入理解Bluez协议栈之蓝牙Mesh的支持(1/5)

BlueZ是Linux官方蓝牙协议栈。它是一个基于GNU General Public License (GPL)发布的开源项目,从Linux 2.4.6开始便成为Linux 内核的一部分。如果你是linux平台开发蓝牙的的工程师,肯定会接触过Bluez协议栈,hciconfig,hciattach,hciconfig等工具都是很好用的工具。

3321

阿敦软件技术框架-跟着JHipster学做项目专栏

跟着JHipster学做项目(1)- MockMvc用法技巧 跟着JHipster学做项目(2) - 使用Swagger2生成API文档 (上)生成swagger的asciidoc文件 跟着JHipster学做项目(3) - Maven的使用技巧(上)分离jar和依赖 跟着JHipster学做项目(3) - Maven的使用技巧(下)去掉因lifecycle引起的红叉 跟着JHipster学做项目 (4)审计功能 跟着JHipster学做项目 (5) 异常处理(上)Spring Boot后端 跟

java_augur的专栏 4540

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

jhipster 配置 mysql_JHipster初次安装使用教程

首先,介绍一下自己,我是一个是三流程序员,哦不,码农!现在要学习JHipster,现在开始在思否分析那个自己的成长经历,也希望可以给到大家帮助,希望大家支持,谢谢大家了!首先我们要吃一手资源,贴一个JHipster官网[JHipster 官网(https://jhipster.github.io/)不废话了,我们直接开始安装JHipster环境:一、配置环境1、安装npm去Node.js官网去下载...

weixin_34664586的博客 558

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

JHipster中文文档(一)

介绍 技术栈 客户端技术栈 服务端技术栈 微服务技术栈 生产环境支持 环境设置 安装JHipster 安装方式 使用Yarn进行本地安装 当使用Angular时的快速配置 当使用AngularJS 1.x时的快速配置 其他组件安装 其他问题 Jhipster核心任务 创建一个应用 快速入门 生成应用时的问题 Q1. Which type of application wo...

alleyz 2万+

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

JHipster初次使用教程

JHipster或者称Java Hipster,是一个应用代码产生器,能够创建spring Boot + AngularJS + Bootstrap的应用,所以首先你要配置好Java的环境、Git以及Maven或者Gradle的环境,然后通过npm安装Jhipster所需的一些必要的工具。 JHipster 官网 https://jhipster.github.io/ 官网Ecli

8豆少爷博客 1万+

使用jhipster-registry来创建注册中心

使用jhipster-registry来创建注册中心 jhipster-registry 是一个运行应用,来自于jhipster的团队,就像jhipster生成器一样,它也是开源的,并且它的源码就在jhipster网站上。 jhipster-registry有以下三个主要目的: * 它是一个Eureka server,它可以充当发现应用的服务器,控制路由,对所有的应用提供负载均衡和可扩展性。...

Nero的博客 6920

关于Jhipster register使用的一点小小心得

这几天因为工作上的原因要布置一下Jhipster register测试使用一下,然后在布置使用的过程中就发现了一些可能出现的问题,拿出来和大家分享一下: 首先要把基础环境搭建好,因为公司使用的电脑系统是mac系统,所以下面说的操作都是在mac系统的基础上执行的,如果想清楚windows系统下的操作请忽略,当然虽然系统不一样但是解决问题的时候提供的思路还是可以的。 在安装Jhipster reg...

朝夕不待人的博客 1577

JHipster技术栈定制 - JHipster Registry配置信息加密

本文说明了如何开启和使用JHipster-Registry的加解密功能。 1 整体规划 1.1 名词说明 名词 说明 备注 对称加密 最快速、最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secret key)。 直接在bootstrap.yml文件中设置好key 非对称加密 非对称加密使用了一对密钥,公钥(public k...

weixin_34226182的博客 340

jhipster 配置 mysql_JHipster技术栈定制 - JHipster Registry配置信息加密

本文说明了如何开启和使用JHipster-Registry的加解密功能。1 整体规划1.1 名词说明名词说明备注对称加密最快速、最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secret key)。直接在bootstrap.yml文件中设置好key非对称加密非对称加密使用了一对密钥,公钥(public key)和私钥(private key)。私...

weixin_34456923的博客 239

jhipster 配置 mysql_java – 将jhipster后端和前端分成两个项目?

我正在尝试jhipster基于令牌的身份验证.它完美地运作.现在,我想在不同的域上运行后端和前端代码.我怎样才能做到这一点?这是我试过的:>运行yo jhipster并选择基于令牌的身份验证选项:Welcome to the JHipster Generator? (1/13) What is the base name of your application? jhipster? (2/1...

weixin_42537499的博客 172

重置密码功能

修改用户密码

qq_43026206的博客 1995

jhipster uaa认证原理

http://www.itdaan.com/blog/2018/09/01/d54394ed7c9f86c793949116a162678b.html 总结:jhipster认证是由网关gateway项目暴露/auth/login端点。需要访问资源时首先访问gateway的/auth/login地址进行认证。当gateway得到用户、密码在调用uaa,uaa进行认证生成token并返回至gate...

join_null的博客 2085

Jhipster权限控制设计及改进

com.cloud.gate.config.MicroserviceSecurityConfiguration.javapublic void configure(HttpSecurity http) throws Exception { http .csrf() .ignoringAntMatchers("/h2-console/**") .

bob的专栏 2582

2. 配置Jhipster邮箱服务器并能够发送邮件

1. 安装完成后进行启动Jhipster 1.1 启动后端 1.2 启动前端 ==启动前后端进行登陆,初识账号/密码为 admin/admin == 登陆地址为:http://localhost:9000 登录界面 OK,已经启动Jhipster框架,可以进行自己想要的内容开发,Jhipster进行继承了很多基础性的功能,不需要自己进行进行开发。 1.3 设置邮件服务器 进入application-dev.yaml中 找到Jhipster下的mail属性,进行修改: 加入from属性: from:

奔跑入坑大数据 623
上一篇: Java时间常用处理方法
下一篇: 阿敦软件技术框架-跟着JHipster学做项目专栏
java_augur
博客等级 码龄22年 67粉丝 64原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值