SpringBoot集成Spring Security(二)注册 、密码加密、修改密码

SpringBoot集成Spring Security(一)登录注销
写在前面
上一节创建了项目并且利用Spring Security完成了登录注销功能,这里继续说一下注册、密码加密和找回密码,代码注释较清晰。
一、web层
在这里插入图片描述控制
StudentController.java

package com.jxnu.os.controller;import com.jxnu.os.model.RespBean;
import com.jxnu.os.model.Student;
import com.jxnu.os.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import java.util.List;/*** @author xiao*/
@RestController
@RequestMapping("/student")
public class StudentController {@AutowiredStudentService studentService;/*** 注册* @param student* @return*/@PostMapping("/register")public RespBean register(Student student) {if(studentService.register(student)){return RespBean.ok("注册成功",student);}else{return RespBean.error("注册失败,用户名已存在");}}/*** 修改密码* @param sno* @param password* @param rePassword* @return*/@PutMapping("/modifyPass")public RespBean modifyPass(String sno,String password,String rePassword) {if(studentService.modifyPass(sno,password,rePassword)){return RespBean.ok("修改成功");}else{return RespBean.error("修改失败,原密码错误");}}}

二、service层
注册时对密码进行加密,修改密码时则需先解密后验证
StudentService.java

package com.jxnu.os.service;import com.jxnu.os.mapper.StudentMapper;
import com.jxnu.os.model.Student;
import com.jxnu.os.utils.StudentUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;import java.util.List;/*** @author xiao*/
@Service
public class StudentService implements UserDetailsService {@AutowiredStudentMapper studentMapper;/*** 注册* @param student* @return*/public boolean register(Student student) {Student existUser = studentMapper.loadUserBySno(student.getUsername());if (existUser != null) {//如果用户名已存在return false;} else {BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();String encode = encoder.encode(student.getPassword());student.setPassword(encode);studentMapper.insert(student);return true;}}/*** 修改密码* @param sno* @param password* @param rePassword* @return*/public boolean modifyPass(String sno,String password,String rePassword) {Student student = studentMapper.loadUserBySno(sno);BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();if(encoder.matches(password,student.getPassword())) {String encode = encoder.encode(rePassword);rePassword = encode;studentMapper.modifyPass(sno,rePassword);return true;}else {return false;}}}

三、mapper层
StudentMapper.java

package com.jxnu.os.mapper;import com.jxnu.os.model.Student;
import org.apache.ibatis.annotations.Param;import java.util.List;/*** @author xiao*/
public interface StudentMapper {int insert(Student student);int modifyPass(String sno,String rePassword);
}

StudentMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.jxnu.os.mapper.StudentMapper"><resultMap id="BaseResultMap" type="com.jxnu.os.model.Student"><id column="id" property="id" jdbcType="INTEGER"/><result column="username" property="username" jdbcType="VARCHAR"/><result column="sno" property="sno" jdbcType="VARCHAR"/><result column="s_sex" property="s_sex" jdbcType="CHAR"/><result column="t_id" property="t_id" jdbcType="INTEGER"/><result column="password" property="password" jdbcType="VARCHAR"/></resultMap><update id="modifyPass" parameterType="com.jxnu.os.model.Student">update student set password = #{rePassword} where sno=#{sno}</update><insert id="insert" parameterType="com.jxnu.os.model.Student">insert into student (username,password)values (#{username,jdbcType=VARCHAR},#{password,jdbcType=VARCHAR})</insert></mapper>

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自动驾驶需要做哪些测试?

来源&#xff1a;广电计量&#xff0c;文&#xff1a;李梓熙、王闻彦参考资料来源&#xff1a;《有问必答 | 自动驾驶汽车之道路“测试”与“考试”》by公安部交通管理科研所微发布自动驾驶已然成为汽车行业热词。在大家殷切的期盼下&#xff0c;近几年上市的车型&#xff0c;多…

大数据的应用-UserCF和ItemCF推荐算法

一.推荐系统 1.1 推荐系统是大数据在互联网领域的典型应用&#xff0c;它可以通过分析用户的历史记录来了解用户的喜好&#xff0c;从而主动的为用户推荐其感兴趣的信息&#xff0c;满足用户的个性化推荐需求&#xff0e; 1.2 推荐系统是自动联系用户和物品的一种工具&#x…

计算机网络之Web应用

1、web与HTTP world Wide Web&#xff1a; 网页 网页互相链接 网页包含多个对象&#xff1a; 对象&#xff1a; HTML文件、JPEG图片、视频文件、动态脚本等 基本HTML文件&#xff1a; 包含对其他对象引用的链接 对象的寻址&#xff1a; URL&#xff08;Uniform Resource Locato…

HBase错误解决(启动Hbase出现错误的替换,启动hbase shell出现ERROR KeeperErrorCode=NoNode for /hbase/master)

&#xff11;&#xff0e;问题描述 我查阅资料发现&#xff0c;网上很多人和我出现相同的错误&#xff0c;却没有一个可以解决的教程&#xff0c;于是我在解决了我的一个错误后就立即写了这篇文章&#xff0c;需要能帮到一些人&#xff0c;文章不一定对每个人都有效&#xff0c…

如何使用jmeter进行并发登录测试

第一种方案直接从数据库中获取账号和密码 1、设置线程数为20 &#xff0c;我们的并发用户量就是20个用户同时登录 2、添加定时器 3、设置集合点&#xff0c;当用户数量达到20个的时候再同时请求进行登录操作 4、添加配置元件&#xff1a;JDBC Connection Configuration 5、添加…

云计算与分布式系统课程学习笔记(一)——云计算简介

大数据对于系统架构的需求 显式的需求 海量计算和存储快速计算 隐式的需求 数据的快速传输灵活性低成本 如何实现这些需求&#xff1f; 并行化&#xff08;并行化的理念存在于计算机方方面面&#xff09; 并行请求&#xff08;分配给多个计算机&#xff09;并行线程&…

DeepMind用神经网络求解MIP后,攻破运筹学只是时间问题?你想多了

来源&#xff1a;杉数科技作者&#xff1a;皇甫琦、葛冬冬、杉数科技COPT开发组Google的DeepMind团队最近官宣了一篇神经网络(Neural Networks)求解MIP论文。一石激起千层浪&#xff0c;在国内外的运筹优化社群引起了讨论。部分围观吃瓜群众纷纷表示&#xff1a;"This is …

计算机视觉-SIFT

一.SIFT(Scale Invariant Feature Transform) 算法 1.图像尺度空间 要让计算机能够对物体在不同尺度下有一个统一的认知&#xff0c;就要需要考虑图像在不同尺度(远近&#xff0c;大小&#xff0c;颜色区别等)下存在的特点&#xff0e;尺度空间的获取通常使用高斯模糊来实现&…

世界上最好的光刻机为什么来自荷兰?【物联网智商精选】

来源: 大数据实验室“是说芯语”已陪伴您439天现在微电子集成电路技术对世界的各种科技电子产品越来越应用广泛了&#xff0c;一个国家的发展越来越离不开高端芯片了&#xff0c;一个国家越是发展得越快对高端芯片需求量越大&#xff0c;比如我国的芯片需求占世界的50&#xff…

云计算与分布式系统课程学习笔记(二)——Linux基本命令的使用与熟悉

&#xff08;1&#xff09; jps 【显示当前系统的java进程情况&#xff0c;及其id号】 -q只显示pid&#xff0c;不显示class名称,jar文件名和传递给main方法的参数-m输出传递给main方法的参数-l输出主类的完整包名或者jar文件完整路径名-v输出传递给JVM的参数 编写一个JSPDemo…

【转】为了修复打码女神脸,他们提出二阶段生成对抗网络EdgeConnect

当图像缺失部分太多的时候&#xff0c;结合多阶段方法和边缘先验信息&#xff0c;这个 GAN 实现了高还原度的图像修复&#xff0c;玩法还不止于此。 在过去几年中&#xff0c;深度学习技术在图像修复方面取得了显着进步。然而&#xff0c;许多这些技术无法重建合理的结构&#…

高等数学、线性代数、概率论、几何这些知识可以用来干什么?

来源&#xff1a;图灵人工智能应该会有很多模友在开始学习数学分析和高等数学时&#xff0c;第一反应是&#xff1a;但其实大多数人所用的教材&#xff0c;从大众角度看还没有到一种极致精确的架构数学的程度。大多数的教材所做的还是“我教会你怎么弄这个东西就行了&#xff0…

CentOS7.7安装MySQL5.6并配置环境变量(详细版)

i. tar包下载 官网下载 https://dev.mysql.com/downloads/mysql/网盘获取 链接&#xff1a;https://pan.baidu.com/s/1DpULc0qQ4hqx6HWUwRilpw 提取码&#xff1a;tgdv ii. 安装所需环境 yum -y install make gcc-c cmake bison-devel ncurses-develiii. 解压tar包&#xf…

多少血的教训,才能换来对自动驾驶的严格限定、真实了解和正确使用?

来源&#xff1a;胡延平EarthRambler真的到了应该出台严格的安全措施的时候&#xff0c;而&#xff1c;道路交通安全法*修订建议稿&#xff1e;如何明确责任成为关从最新一起车祸的碰撞情况看&#xff0c;高速公路追尾卡车&#xff0c;雷达对前方目标的识别和驾驶系统的反应可能…

java并发编程-----深入剖析ThreadLocal

一.对ThreadLocal的理解 ThreadLocal&#xff0c;很多地方叫做线程本地变量&#xff0c;也有些地方叫做线程本地存储&#xff0c;其实意思差不多。可能很多朋友都知道ThreadLocal为变量在每个线程中都创建了一个副本&#xff0c;那么每个线程可以访问自己内部的副本变量。 这句…

VMware下主机与虚拟机剪切板独立,无法直接复制粘贴

看了很多博客都说需要重新安装vmware tools&#xff0c;但我使用的是这种方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 关闭虚拟机点击编辑虚拟机设置->选项选择客户机隔离&#xff0c;勾选上启动复制粘贴即可&#xff08;如果之前就已经勾选上但失效的情…

教AI区分因果关系和相关性,将改变下一代 AI 的研发

来源&#xff1a;ScienceAI编辑&#xff1a;萝卜皮多年前&#xff0c;AI 领域曾发生过一件荒唐而有趣的事情。据说&#xff0c;研究人员开发了一种对医院数据进行训练的算法。这个算法发现&#xff0c;「患有哮喘的肺炎患者的治愈表现&#xff0c;比没有哮喘的肺炎患者更好」&a…

Java Socket实现客户端服务端之间的通信

Java Socket Java Socket编程用于在不同JRE上运行的应用程序之间的通信。Java Socket编程可以是面向连接的或无连接的。Socket和ServerSocket类用于面向连接的套接字编程&#xff0c;DatagramSocket和DatagramPacket类用于无连接套接字编程。 此Demo将进行单向客户端和服务器…

数据结构-线性结构

一.线性结构 1.顺序线性表 1.1 线性结构是一种基本的数据结构&#xff0c;具有单一前驱和后继的数据关系描述。 1.2 线性表的存储结构分为顺序存储和链式存储。 1.3 顺序线性表的元素间的逻辑关系无需占用额外的空间来存储。 1.4 一般地&#xff0c;以LOC(a1a_1a1​)表示线性…

脑智前沿科普|虚拟现实如何欺骗你的大脑

来源&#xff1a;公众号&#xff08;脑与心智毕生发展研究中心CLIMB&#xff09;编辑&#xff1a;Yezi审阅&#xff1a;mingzlee7虚拟现实(Virtual reality, VR)就像被神奇地传送到另一个世界。这是一项令人兴奋的技术&#xff0c;但当我们戴上耳机后&#xff0c;我们很少停下来…