一、原理分析1.1加密原理

首先前端页面发送注册的账户信息到controller层,然后依次经过service层和dao层,最后入库。其中对密码的加密应该放在service层进行,加密后再入库。

spring security中有一个加密类BCryptPasswordEncoder可以用来对密码进行加密,调用其中的encode方法返回一个加密后的字符串

public String encode(CharSequence rawPassword) {

String salt;

if (strength > 0) {

if (random != null) {

salt = BCrypt.gensalt(strength, random);

}

else {

salt = BCrypt.gensalt(strength);

}

}

else {

salt = BCrypt.gensalt();

}

return BCrypt.hashpw(rawPassword.toString(), salt);

}

使用时可以在spring的配置文件中配置一个加密类的bean,这样在service中可以直接注入

加密后数据库中存储的是加密过后的字符串。

1.2加密后的登录过程

对密码进行加密后数据库中存储的是加密字符串,用户发起登录请求后,框架会使用相同的加密算法对前端传递的密码进行加密并得到加密字符串,然后和数据库中查询到的字符串进行对比。

二、代码实现

具体的工程代码可以参考我的工程示例,下文中只给出了和添加用户相关的部分。

在配置文件中配置加密类

2.1添加用户的页面如下, register.html

注册页面

用户名:

密 码:

2.2controller层创建一个增加用户的方法

@RestController

@RequestMapping("/user")

public class UserController {

@Autowired

private IUserService userService;

@PostMapping("/add")

public String add(UserInfo userInfo){

userService.add(userInfo);

return "success";

}

}

2.3service层

@Autowired

private BCryptPasswordEncoder passwordEncoder;

...//省略其他

@Override

public void add(UserInfo userInfo) {

//对密码加密

userInfo.setPassword(passwordEncoder.encode(userInfo.getPassword()));

userDao.add(userInfo);

}

这里的passwordEncoder就是在配置文件中配置的加密bean,注入后可以直接使用

dao层这里就不再列举了。

三、测试

启动工程并成功登录后,跳转到首页,

选择注册新账号后跳转到注册页面

输入账户和密码后注册,会在数据库中插入一条新的记录。

这里我页面上输入的是 admin/admin,数据库中存储的password是加密后的

$2a$10$URSaaafrPOCjFYvhrhQbku2/l36IJ0zH0G8xeJzf5lAH2F1JJ1ybG

四、用加密后的账号登录

此时如果使用刚刚新建的这个账号进行登录就会登录失败。因为我们并没有配置spring security认证时的加密方式,默认是不进行加密,所以会直接将前台输入的密码和数据库中的加密字符串进行比较。

要使用这个账号登录还需要进行如下配置

在spring security的配置文件中配置加密策略

在userService的loadUserByUsername方法中去除密码字符串上拼接的{noop}字符串,本来这个就是为了适配密码未加密的情况

public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {

UserInfo userInfo = userDao.findByUsername(username);

User user=new User(userInfo.getUsername(),userInfo.getPassword(),getRoles());

return user;

}

然后使用刚才注册的 admin/admin就可以登录成功了。

注意如果进行了上面两部,数据库中以前的账户将不能进行登录了,因为数据库中的密码是没有加密的,而框架会对前台传递的密码进行加密后再和数据库中的比较。所以一定要记住上面新注册的这个账号admin/admin

这里我给出admin对应的加密字符串

$2a$10$URSaaafrPOCjFYvhrhQbku2/l36IJ0zH0G8xeJzf5lAH2F1JJ1ybG

如果大家忘记了刚才注册的账号,可以在数据库中插入一条admin/admin的记录。

五、总结

添加账户主要是需要用spring security自带的加密类BCryptPasswordEncoder对用户密码进行加密。

要使用新注册的账户登录就需要在配置文件中配置加密策略

配置后原来的账号因为密码没有加密将不能使用

六、示例工程源码

示例工程已经上传到码云上,如果有需要欢迎大家参考

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

java对用户名密码加密_Spring security实现对账户进行加密相关推荐

  1. java http 用户名密码_Web后端语言模拟http请求(带用户名和密码)实例代码大全

    标签: RESTful API是目前比较成熟的一套互联网应用程序的API设计理论.而随着RESTful API的成熟和流行,应用开发方面就需要以模拟http请求的方式来调用RESTful API接口: ...

  2. JAVA记住用户名密码功能实现

    1.首先,写一个登陆的jsp页面,做一个form表单的post请求,地址链接到自己的servlet文件 2.然后写servlet,用户名密码验证,判断是否勾选记住密码,并生成cookie,保存到客户端 ...

  3. java webservice用户名密码_WebService 用户名密码验证

    在项目开发的过程中,WebService是经常要用的,当调用WebService方法时,需要经过服务的验证才可以调用,一般就是用户名/密码验证,还有一个就是证书.下面程序使用的是用户名/密码的方式,很 ...

  4. java如何记住登录状态_Spring security实现记住我下次自动登录功能过程详解

    一.原理分析 第一次登陆时,如果用户勾选了readme选项,登陆成功后springsecurity会生成一个cookie返回给浏览器端,浏览器下次访问时如果携带了这个cookie,springsecu ...

  5. java sqlserver ssl_拦截SQLSERVER的SSL加密通道替换传输过程中的用户名密码实现运维审计(一)...

    工作准备 •一台SQLSERVER 2005/SQLSERVER 2008服务 •SQLSERVER jdbc驱动程序 •Java开发环境eclipse + jdk1.8 •java反编译工具JD-C ...

  6. java ldap添加用户名密码_java ldap用户密码md5加密

    在这里不过多介绍ldap,因为这样的文章特别多,这里就简单直接的记录这一个问题. 在springboot中通过引入spring-boot-starter-data-ldap,使用LdapTemplat ...

  7. java access 密码_java 连接加密Access2007数据库时,不用输入用户名密码也能连上

    java 连接加密Access2007数据库时,不用输入用户名密码也能连上 我用Access2007做了一个加密的数据库,用的是Access本身的功能加密的.双击打开Database2.mdb文件时, ...

  8. java security 详解_Spring Security入门教程 通俗易懂 超详细 【内含案例】

    Spring Security的简单使用 简介 SSM 整合 Security 是比较麻烦的,虽然Security的功能比 Shiro 强大,相反却没有Shiro的使用量多 SpringBoot出现后 ...

  9. Java 对用户密码加密(Jeecg 登录密码加密方式)MD5andDES方式

    jeecg对应的路径为org.jeecgframework.core.util下的PasswordUtil  可参考作为其他应用的加密方式或者第三方使用Jeecg账号验证登录: 直接上代码(可直接调用 ...

最新文章

  1. Linux那些事儿之我是Sysfs(3)设备模型上层容器
  2. 基于shell脚本比较数字大小
  3. mybatis mysql 分表_Mybatis的分表实战
  4. apache thrift_使用Java快速入门的Apache Thrift
  5. iphone黑屏转圈_iphone8一直在黑屏转圈
  6. 流程多节点调用同一张业务表单的锚点问题
  7. ASP.NET+MVC自学材料
  8. Linux 内核里的数据结构——基数树
  9. Android BaseAdapter应用基础
  10. 嵌入式linux ucgui,Helper2416开发板移植ucgui(嵌入式linux运行ucgui)
  11. mkdir命令、chmod修改权限、利用scp 远程上传下载文件/文件夹
  12. 手机如何与运营商服务器,通过这样的操作,让你的手机网速瞬间提升。
  13. 【SQL自学打卡|DAY17】——多表查询
  14. 统计字符串中字幕出现的数量(Map案例)
  15. 小程序 - 网址大全
  16. 如何在网页端登录企业邮箱修改密码?
  17. 方便快捷!身份证OCR带你一秒录入
  18. 智能座舱软件平台EX5.0发布,量“声”打造音视觉融合交互体验
  19. BAT批处理脚本教程
  20. ThreadPoolExecutor详解及线程池优化

热门文章

  1. 任正非内部讲话:ChatGPT对我们的机会是什么(实录)
  2. Deepfakes论文总结
  3. 扩展城市信道etu模型matlab仿真,LTE-A系统中物理随机接入信道信号检测的仿真与实现...
  4. 7-3 马会飞 (15分)
  5. MongoDB数据库java配置使用
  6. 线程一共有几种状态?
  7. ios 关于字体样式设置
  8. 小程序轮播图swiper点击图片自定义跳转
  9. 苹果CMS海螺模板带后台
  10. 软件使用-历史足迹-02