真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

怎么在Spring中利用security加密賬戶-創(chuàng)新互聯(lián)

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)碛嘘P(guān)怎么在Spring中利用security加密賬戶,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

成都創(chuàng)新互聯(lián)公司是一家專業(yè)提供沙洋企業(yè)網(wǎng)站建設(shè),專注與做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、H5開發(fā)、小程序制作等業(yè)務(wù)。10年已為沙洋眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站制作公司優(yōu)惠進(jìn)行中。

一、原理分析1.1加密原理

首先前端頁(yè)面發(fā)送注冊(cè)的賬戶信息到controller層,然后依次經(jīng)過service層和dao層,最后入庫(kù)。其中對(duì)密碼的加密應(yīng)該放在service層進(jìn)行,加密后再入庫(kù)。

spring security中有一個(gè)加密類BCryptPasswordEncoder可以用來對(duì)密碼進(jìn)行加密,調(diào)用其中的encode方法返回一個(gè)加密后的字符串

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);
}

使用時(shí)可以在spring的配置文件中配置一個(gè)加密類的bean,這樣在service中可以直接注入

加密后數(shù)據(jù)庫(kù)中存儲(chǔ)的是加密過后的字符串。

1.2加密后的登錄過程

對(duì)密碼進(jìn)行加密后數(shù)據(jù)庫(kù)中存儲(chǔ)的是加密字符串,用戶發(fā)起登錄請(qǐng)求后,框架會(huì)使用相同的加密算法對(duì)前端傳遞的密碼進(jìn)行加密并得到加密字符串,然后和數(shù)據(jù)庫(kù)中查詢到的字符串進(jìn)行對(duì)比。

二、代碼實(shí)現(xiàn)

具體的工程代碼可以參考我的工程示例,下文中只給出了和添加用戶相關(guān)的部分。

在配置文件中配置加密類


  

2.1添加用戶的頁(yè)面如下, register.html


  
    
    注冊(cè)頁(yè)面
  
  

  
    用戶名:
    密 碼:
          

2.2controller層創(chuàng)建一個(gè)增加用戶的方法

@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) {
  //對(duì)密碼加密
  userInfo.setPassword(passwordEncoder.encode(userInfo.getPassword()));
  userDao.add(userInfo);
}

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

dao層這里就不再列舉了。

三、測(cè)試

啟動(dòng)工程并成功登錄后,跳轉(zhuǎn)到首頁(yè),

怎么在Spring中利用security加密賬戶

選擇注冊(cè)新賬號(hào)后跳轉(zhuǎn)到注冊(cè)頁(yè)面

怎么在Spring中利用security加密賬戶

輸入賬戶和密碼后注冊(cè),會(huì)在數(shù)據(jù)庫(kù)中插入一條新的記錄。

怎么在Spring中利用security加密賬戶

這里我頁(yè)面上輸入的是 admin/admin,數(shù)據(jù)庫(kù)中存儲(chǔ)的password是加密后的

$2a$10$URSaaafrPOCjFYvhrhQbku2/l36IJ0zH0G8xeJzf5lAH2F1JJ1ybG

四、用加密后的賬號(hào)登錄

此時(shí)如果使用剛剛新建的這個(gè)賬號(hào)進(jìn)行登錄就會(huì)登錄失敗。因?yàn)槲覀儾]有配置spring security認(rèn)證時(shí)的加密方式,默認(rèn)是不進(jìn)行加密,所以會(huì)直接將前臺(tái)輸入的密碼和數(shù)據(jù)庫(kù)中的加密字符串進(jìn)行比較。

要使用這個(gè)賬號(hào)登錄還需要進(jìn)行如下配置

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


    
    
      
    
  

  
  

在userService的loadUserByUsername方法中去除密碼字符串上拼接的{noop}字符串,本來這個(gè)就是為了適配密碼未加密的情況

public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
    UserInfo userInfo = userDao.findByUsername(username);
    User user=new User(userInfo.getUsername(),userInfo.getPassword(),getRoles());
    return user;
}

然后使用剛才注冊(cè)的 admin/admin就可以登錄成功了。

注意如果進(jìn)行了上面兩部,數(shù)據(jù)庫(kù)中以前的賬戶將不能進(jìn)行登錄了,因?yàn)閿?shù)據(jù)庫(kù)中的密碼是沒有加密的,而框架會(huì)對(duì)前臺(tái)傳遞的密碼進(jìn)行加密后再和數(shù)據(jù)庫(kù)中的比較。所以一定要記住上面新注冊(cè)的這個(gè)賬號(hào)admin/admin

這里我給出admin對(duì)應(yīng)的加密字符串

$2a$10$URSaaafrPOCjFYvhrhQbku2/l36IJ0zH0G8xeJzf5lAH2F1JJ1ybG

如果大家忘記了剛才注冊(cè)的賬號(hào),可以在數(shù)據(jù)庫(kù)中插入一條admin/admin的記錄。

上述就是小編為大家分享的怎么在Spring中利用security加密賬戶了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司行業(yè)資訊頻道。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站www.cdcxhl.com,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。


標(biāo)題名稱:怎么在Spring中利用security加密賬戶-創(chuàng)新互聯(lián)
轉(zhuǎn)載來源:http://weahome.cn/article/doishc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部