開始吧
1、 認識MD5
簡單理解:是一個算法(消息摘要算法)。實現原理。
2、 自定義類MyPasswordEncoderService實現PasswordEncoder接口
package com.zhoujinyuan.springsecurity.service;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Component;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Objects;
@Component
public class MyPasswordEncoderService implements PasswordEncoder {
/**
* 進行加密的方法
*
* @param rawPassword 未加密的密碼
* @return
*/
@Override
public String encode(CharSequence rawPassword) {
return privateEncode(rawPassword);
}
/**
* 進行密碼比對的方法
*
* @param rawPassword 未加密的密碼
* @param encodedPassword 加密的密碼
* @return
*/
@Override
public boolean matches(CharSequence rawPassword, String encodedPassword) {
return Objects.equals(privateEncode(rawPassword),encodedPassword);
}
/**
* 加密方法
*/
private String privateEncode(CharSequence rawPassword){
String algorithm = "MD5";
String encoded = null;
try {
MessageDigest messageDigest = MessageDigest.getInstance(algorithm);
// 獲取輸入的字節數組
byte[] input = ((String) rawPassword).getBytes();
// 加密
byte[] output = messageDigest.digest(input);
// 將加密后的字節數組轉成 16 進制
encoded = new BigInteger(1, output).toString(16).toUpperCase();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return encoded;
}
}
3、 去配置類配置
//重寫另外一個父類的方法,來設置登錄系統的賬號密碼(走數據庫)
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
//使用自定義 MyUserDetailsService 完成登錄
auth
//走賬號密碼驗證的方法
.userDetailsService(myUserDetailsService)
//走給輸入的密碼加密和比對兩個方法
.passwordEncoder(myPasswordEncoderService);
}
4、 測試即可
測試是成功的~