說明css
(1)JDK版本:1.8java
(2)Spring Boot 2.0.6算法
(3)Spring Security 5.0.9spring
(4)Spring Data JPA 2.0.11.RELEASE數據庫
(5)hibernate5.2.17.Final安全
(6)MySQLDriver 5.1.47網絡
(7)MySQL 8.0.12session
需求緣起併發
不少時候,咱們本身已經有現成的一套系統在運行了,這時候要接入spring security的話,那麼不免會碰到一個問題:就是本身設計的密碼加密方式和spring security提供的加密方式不同,那麼怎麼辦呢?因此這裏咱們要自定義下的加密方式,這個實現起來也是很簡單的,之前不少系統是使用的MD5加密的吧,那麼這裏使用MD5加密進行講解下。app
1、使用MD5加密
1.1 編寫MD5加密工具類
既然要採用MD5加密的話,那麼就須要有MD5的加密算法,這個Java自己就提供了算法工具類,只是調用的時候,編碼會比較多,這裏咱們編寫成一個工具類,相似的代碼在網絡上也能找到不少相似的MD5加密算法編寫:
package com.kfit.config.util;
import java.security.MessageDigest;
/**
* MD5加密工具
*/
public class MD5Util {
private static final String SALT = "wuqian";
public static String encode(String password) {
password = password + SALT;
MessageDigest md5 = null;
try {
md5 = MessageDigest.getInstance("MD5");
} catch (Exception e) {
throw new RuntimeException(e);
}
char[] charArray = password.toCharArray();
byte[] byteArray = new byte[charArray.length];
for (int i = 0; i < charArray.length; i++)
byteArray[i] = (byte) charArray[i];
byte[] md5Bytes = md5.digest(byteArray);
StringBuffer hexValue = new StringBuffer();
for (int i = 0; i < md5Bytes.length; i++) {
int val = ((int) md5Bytes[i]) & 0xff;
if (val < 16) {
hexValue.append("0");
}
hexValue.append(Integer.toHexString(val));
}
return hexValue.toString();
}
}
1.2 自定義加密算法
自定義一個咱們本身的加密類,繼承PasswordEncoder,實現密碼加密和密碼匹配方法便可:
package com.kfit.config;
import org.springframework.security.crypto.password.PasswordEncoder;
import com.kfit.config.util.MD5Util;
public class MyPasswordEncoder implements PasswordEncoder{
@Override
public boolean matches(CharSequence rawPassword, String encodedPassword) {
return encodedPassword.equals(MD5Util.encode((String)rawPassword));
}
@Override
public String encode(CharSequence rawPassword) {
return MD5Util.encode((String)rawPassword);
}
}
1.3 替換原先的BCryptPasswordEncoder
修改WebSecurityConfig方法:
@Bean
public PasswordEncoder passwordEncoder() {
return new MyPasswordEncoder();
}
總體實現起來仍是很簡單的,到這裏就能夠進行從新啓動測試了,查看數據庫的密碼,已是md5生成的密碼方式了,到登陸頁面進行登陸,也是能夠登陸的,到這裏就大功告成了。
歷史文章
215.Spring Boot+Spring Security:初體驗
216.Spring Boot+Spring Security:基於內存的認證信息
217.Spring Boot+Spring Security:基於內存的角色受權
218.Spring Boot+Spring Security:基於內存數據庫的身份認證和角色受權
219.Spring Boot+Spring Security:基於MySQL數據庫的身份認證和角色受權
220.Spring Boot+Spring Security:自定義登陸頁面和構建主頁
221.Spring Boot+Spring Security:登出和403處理
222.Spring Boot+Spring Security:動態加載角色
223.Spring Boot+Spring Security:原理1
224.Spring Boot+Spring Security:自定義Filter
246.Spring Boot+Spring Security:頁面白名單和獲取登陸信息
13. Spring Boot+Spring Security:基於URL動態權限n種方案
248.Spring Boot+Spring Security:基於URL動態權限:準備工做
249.Spring Boot+Spring Security:基於URL動態權限:擴展access()的SpEL表達式
250.Spring Boot+Spring Security:基於URL動態權限:自定義AccssDesionManager
251.Spring Boot+Spring Security:基於URL動態權限:自定義Filter
252.Spring Boot+Spring Security:標籤sec:authorize的使用
253.Spring Boot+Spring Security:獲取用戶信息和session併發控制
254.Security註解:@PreAuthorize,@PostAuthorize, @Secured, EL實現方法安全
我就是我,是顏色不同的煙火。
我就是我,是不同凡響的小蘋果。
à悟空學院:http://t.cn/Rg3fKJD
學院中有Spring Boot相關的課程!點擊「閱讀原文」進行查看!
SpringBoot視頻:http://t.cn/R3QepWG
Spring Cloud視頻:http://t.cn/R3QeRZc
SpringBoot Shiro視頻:http://t.cn/R3QDMbh
SpringBoot交流平臺:http://t.cn/R3QDhU0
SpringData和JPA視頻:http://t.cn/R1pSojf
SpringSecurity5.0視頻:http://t.cn/EwlLjHh
Sharding-JDBC分庫分表實戰:http://t.cn/E4lpD6e