255.Spring Boot+Spring Security:使用md5加密


說明

(1)JDK版本:1.8

(2)Spring Boot 2.0.6

(3)Spring Security 5.0.9

(4)Spring Data JPA 2.0.11.RELEASE

(5)hibernate5.2.17.Final

(6)MySQLDriver 5.1.47

(7)MySQL 8.0.12

 

需求緣起

       很多時候,我們自己已經有現成的一套系統在運行了,這時候要接入spring security的話,那么難免會碰到一個問題:就是自己設計的密碼加密方式和spring security提供的加密方式不一樣,那么怎么辦呢?所以這里我們要自定義下的加密方式,這個實現起來也是很簡單的,以前很多系統是使用的MD5加密的吧,那么這里使用MD5加密進行講解下。

 

一、使用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生成的密碼方式了,到登錄頁面進行登錄,也是可以登錄的,到這里就大功告成了。

歷史文章

214. Spring Security:概述

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&nbsp;Boot+Spring&nbsp;Security:動態加載角色

223.Spring&nbsp;Boot+Spring&nbsp;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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM