怎么在Spring中利用security加密账户-创新互联

这期内容当中小编将会给大家带来有关怎么在Spring中利用security加密账户,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

成都创新互联公司是一家专业提供沙洋企业网站建设,专注与做网站、成都网站设计、H5开发、小程序制作等业务。10年已为沙洋众多企业、政府机构等服务。创新互联专业网站制作公司优惠进行中。

一、原理分析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层这里就不再列举了。

三、测试

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

怎么在Spring中利用security加密账户

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

怎么在Spring中利用security加密账户

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

怎么在Spring中利用security加密账户

这里我页面上输入的是 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加密账户了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注创新互联网站建设公司行业资讯频道。

另外有需要云服务器可以了解下创新互联建站www.cdcxhl.com,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


文章名称:怎么在Spring中利用security加密账户-创新互联
标题URL:http://csdahua.cn/article/doishc.html
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流