免费做网站排名有没有做花卉种子的网站啊
- 作者: 五速梦信息网
- 时间: 2026年03月21日 10:22
当前位置: 首页 > news >正文
免费做网站排名,有没有做花卉种子的网站啊,国外校园网站建设,合肥备案简介
在数字时代#xff0c;信息安全的重要性不言而喻#xff0c;尤其当涉及到个人隐私和账户安全时。每天#xff0c;无数的用户登录各种在线服务#xff0c;从社交媒体到银行账户#xff0c;再到电子邮件和云存储服务。这些服务的背后#xff0c;是复杂的系统架构信息安全的重要性不言而喻尤其当涉及到个人隐私和账户安全时。每天无数的用户登录各种在线服务从社交媒体到银行账户再到电子邮件和云存储服务。这些服务的背后是复杂的系统架构其中包含着用户最为敏感的数据——密码。
过去简单的加密方法和弱密码策略导致了许多严重的数据泄露事件。例如2013年雅虎Yahoo遭遇的大规模数据泄露事件影响了数十亿的用户账户部分原因就是由于使用了不够安全的密码存储技术。再如2016年的LinkedIn数据泄露事件尽管该公司使用了SHA-1散列算法对密码进行了处理但未加盐的密码散列最终还是被破解暴露了用户的隐私。
这些事件引发了行业对于密码安全的深刻反思促使开发者和安全专家寻找更安全的解决方案。BCrypt作为一种适应性强且经过时间考验的密码哈希算法成为了现代密码安全的基石。它不仅能够有效抵御暴力破解和彩虹表攻击还能通过增加工作因子来适应未来计算能力的增长。
在本文中我们将深入探讨如何在Spring项目中利用Maven和BCrypt来实现一个安全的密码修改功能。这不仅仅是关于代码实现的问题更是一次对密码安全重要性的重申以及对如何在实际应用中践行这一原则的示范。我们将从环境搭建开始逐步构建出一个既实用又安全的密码修改流程确保即使在最恶劣的情况下用户的密码也能得到妥善保护。 通过本文的学习你将获得宝贵的实践经验了解如何在自己的项目中实施类似的解决方案从而提升应用的安全性给用户提供更加安心的在线体验。在接下来的内容中我们将一步步解析实现过程从添加依赖到编写核心业务逻辑直至完成完整的功能测试确保每一步都遵循最佳的安全实践。
controller(UserController)
/*** 修改密码/PutMapping(/update/pwd/{id})public Result update(PathVariable(id) long id, RequestBody ChangePasswordVo changePasswordVo) {try{userService.changePassword(changePasswordVo,id);return Result.success(修改成功);}catch (Exception e){// 捕获异常获取异常信息String message e.getMessage();// 如果修改失败返回失败的结果并附带异常信息return Result.failed(message);}} 注解 PutMapping(/update/pwd/{id}) PutMapping 是Spring MVC中的一个注解用于处理HTTP PUT请求。/update/pwd/{id} 是该方法的URL路径。其中 {id} 是一个路径变量用于接收用户ID。 方法定义 public Result update(…) 这是一个公开的方法名为update返回一个Result对象。Result 很可能是一个自定义的响应类通常用于封装API的响应结果包括状态码、消息和数据等。 方法参数 PathVariable(id) long id这是从URL路径中提取的id变量。PathVariable 注解告诉Spring MVC从URL中提取名为id的变量值并将其转换为long类型。RequestBody ChangePasswordVo changePasswordVoRequestBody 注解用于将HTTP请求体中的JSON数据转换为ChangePasswordVo类型的对象。ChangePasswordVo 可能是一个包含旧密码和新密码等信息的DTO数据传输对象。 方法体 首先它尝试调用 userService.changePassword(changePasswordVo,id);。这里假设userService是一个已经注入的服务类用于处理与用户相关的业务逻辑。changePassword 方法可能会根据提供的用户ID和密码信息来更新用户的密码。如果上述操作成功方法将返回一个表示成功的Result对象并附带消息“修改成功”。如果在更新密码的过程中发生异常如数据库错误、密码验证失败等catch 块将捕获该异常并获取其消息。然后它返回一个表示失败的Result对象并附带异常的消息。 entity(VO-ChangePasswordVo)
Data
public class ChangePasswordVo implements Serializable {/** 旧的密码/private String oldpassword;/** 新的密码*/private String newpassword;}注解 Data: 这是一个Lombok库提供的注解。当你添加Data到类上时Lombok会自动为这个类生成getter、setter、equals、hashCode和toString方法。这可以大大减少模板代码的数量使代码更加简洁。implements Serializable: 这表示该类实现了Serializable接口。Serializable是一个标记接口用于指示一个类的对象可以被序列化。序列化是将对象状态转换为字节流以便可以将其写入文件或发送到网络上的另一个位置。如果该类或其成员类如果它们不是基本类型或String、数组等需要被序列化则必须实现这个接口。 成员变量 private String oldpassword;: 这是一个私有字符串类型的成员变量用于存储旧的密码。但是从Java的命名约定来看变量名应该使用驼峰命名法camelCase并且首字母小写。因此更合适的命名可能是oldPassword。private String newpassword;: 同样这是一个私有字符串类型的成员变量用于存储新的密码。按照Java的命名约定它应该被命名为newPassword。 注释 每个成员变量上方都有注释描述了该变量的用途。这是一个很好的做法因为它增加了代码的可读性。但是请注意这些注释是用中文写的而在国际项目中通常建议使用英文注释。 Service UserService
void changePassword(ChangePasswordVo changePasswordVo, Long id); 返回类型 (void): 方法前面有一个void关键字表示这个方法没有返回值。也就是说当你调用这个方法时它不会返回任何值或对象。 方法名 (changePassword): 这是方法的名称即changePassword。当你想在代码的其他部分调用这个方法时你会使用这个名字。 参数: ChangePasswordVo changePasswordVo: 这是方法的第一个参数。 ChangePasswordVo: 这是参数的类型。它可能是一个数据传输对象DTO用于封装与更改密码相关的数据如旧密码、新密码等。changePasswordVo: 这是参数的名称。在方法内部你可以使用这个名称来引用传入的ChangePasswordVo对象。 Long id: 这是方法的第二个参数。 Long: 这是参数的类型表示这是一个长整型64位整数数据。id: 这是参数的名称。在方法内部你可以使用这个名称来引用传入的id值。从参数名可以推测这个id可能表示用户的唯一标识符如用户ID。 UserServiceImpl Overridepublic void changePassword(ChangePasswordVo changePasswordVo, Long id){// 根据id查询用户信息User user userMapper.selectById(id);// 判断原密码是否正确if(!BCrypt.checkpw(changePasswordVo.getOldpassword(),user.getPassword())){throw new RuntimeException(原密码不正确);}// 设置新密码user.setPassword(BCrypt.hashpw(changePasswordVo.getNewpassword(), BCrypt.gensalt()));// 调用Mapper的updateById方法更新用户信息userMapper.updateById(user);} Override 这是一个Java注解它告诉编译器这个方法是从超类或接口中继承或实现的。使用Override注解可以确保你正确地重写了父类或接口中的方法如果没有正确重写例如方法签名不匹配编译器会报错。 public void changePassword(ChangePasswordVo changePasswordVo, Long id) 这是方法的声明部分。 public表示这是一个公共方法可以从任何其他类中被访问。void表示该方法没有返回值。changePassword是方法的名称。ChangePasswordVo changePasswordVo 和 Long id是方法的参数。ChangePasswordVo可能是一个数据传输对象DTO用于封装密码更改请求所需的信息如旧密码和新密码。id则是用户的唯一标识符。 User user userMapper.selectById(id); 使用userMapper可能是MyBatis的Mapper或类似的ORM工具的selectById方法根据提供的id从数据库中查询用户信息并将查询到的用户信息存储在user变量中。 if(!BCrypt.checkpw(changePasswordVo.getOldpassword(),user.getPassword())){ 使用BCrypt库一个流行的密码哈希库的checkpw方法检查用户提供的旧密码从changePasswordVo中获取是否与数据库中存储的哈希密码从查询到的user对象中获取匹配。如果不匹配!BCrypt.checkpw(…)返回true则执行下面的throw语句。 throw new RuntimeException(原密码不正确); 如果旧密码不正确则抛出一个RuntimeException并带有消息“原密码不正确”。调用此方法的代码应该捕获此异常并适当地处理它例如向用户显示错误消息。 user.setPassword(BCrypt.hashpw(changePasswordVo.getNewpassword(), BCrypt.gensalt())); 如果旧密码正确则使用BCrypt库的gensalt方法生成一个新的随机盐值。使用这个新盐值和用户提供的新密码从changePasswordVo中获取作为参数调用BCrypt的hashpw方法生成新的哈希密码。将这个新的哈希密码设置到user对象的password字段中。 userMapper.updateById(user); 使用userMapper的updateById方法更新数据库中对应id的用户的密码信息。这里假设userMapper的updateById方法会处理将user对象中的更改保存到数据库中的逻辑。 测试
先新增一条数据
密码111 进行修改密码;
id为你新增后的id号
输入字段为我之前定义的字段oldpassword与newpassword 可以看到密码已经被修改
- 上一篇: 免费做团购网站的软件好电子相册免费制作
- 下一篇: 免费做网站手机软件现在的网站一般做多宽最好
相关文章
-
免费做团购网站的软件好电子相册免费制作
免费做团购网站的软件好电子相册免费制作
- 技术栈
- 2026年03月21日
-
免费做淘宝联盟网站seo网站的锚文本怎么写
免费做淘宝联盟网站seo网站的锚文本怎么写
- 技术栈
- 2026年03月21日
-
免费做国际网站有哪些wordpress首页轮播图片尺寸
免费做国际网站有哪些wordpress首页轮播图片尺寸
- 技术栈
- 2026年03月21日
-
免费做网站手机软件现在的网站一般做多宽最好
免费做网站手机软件现在的网站一般做多宽最好
- 技术栈
- 2026年03月21日
-
免费做网站站标介绍网页设计
免费做网站站标介绍网页设计
- 技术栈
- 2026年03月21日
-
免费做直播网站深圳企业公司有哪些
免费做直播网站深圳企业公司有哪些
- 技术栈
- 2026年03月21日
