久久r热视频,国产午夜精品一区二区三区视频,亚洲精品自拍偷拍,欧美日韩精品二区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Spring Security 安全認(rèn)證的示例代碼

瀏覽:86日期:2023-08-08 10:39:42

1.1 動(dòng)態(tài)用戶(hù)

1.1.1 放行資源

  如果我們?cè)倥渲玫臅r(shí)候沒(méi)有放行登錄頁(yè)等一些不需要登錄就可以看到的資源,那么訪(fǎng)問(wèn)的時(shí)候就會(huì)全部攔截導(dǎo)致訪(fǎng)問(wèn)不到。所以我們要配置放行一些無(wú)需登錄就可以看到的資源。

<?xml version='1.0' encoding='UTF-8'?><beans:beans xmlns='http://www.springframework.org/schema/security' xmlns:beans='http://www.springframework.org/schema/beans'xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security.xsd'> <!-- 設(shè)置頁(yè)面不登陸也可以訪(fǎng)問(wèn) --> <http pattern='/login.html' security='none'></http> <http pattern='/css/**' security='none'></http> <http pattern='/js/**' security='none'></http> <http pattern='/img/**' security='none'></http> <!-- 頁(yè)面的攔截規(guī)則 use-expressions:是否啟動(dòng) SPEL 表達(dá)式 默認(rèn)是 true --> <http use-expressions='false'> <!-- 當(dāng)前用戶(hù)必須有 ROLE_USER 的角色 才可以訪(fǎng)問(wèn)根目錄及所屬子目錄的資源 --> <intercept-url pattern='/**' access='ROLE_USER'/> <!-- 開(kāi)啟表單登陸功能 --> <form-login/> </http> <!-- 認(rèn)證管理器 --> <authentication-manager> <authentication-provider> <user-service> <!-- 配置靜態(tài)用戶(hù) --><user name='admin' password='123456' authorities='ROLE_USER'/> </user-service> </authentication-provider> </authentication-manager></beans:beans>

1.1.2 動(dòng)態(tài)用戶(hù)

  我們之前配置的都是再配置文件中靜態(tài)用戶(hù),如果用戶(hù)更改就需要修改配置文件十分的不方便,這個(gè)時(shí)候我們就需要從數(shù)據(jù)庫(kù)中讀取用戶(hù)了。修改時(shí)直接修改數(shù)據(jù)庫(kù)就行了。

☞ 認(rèn)證類(lèi)

/** * Created with IntelliJ IDEA. * * @author Demo_Null * @date 2020/10/12 * @description 認(rèn)證類(lèi) */public class UserDetailsServiceImpl implements UserDetailsService { public UserDetails loadUserByUsername(String s) throws UsernameNotFoundException { // UserDetails 對(duì)象 UserDetails userDetails = null;// 構(gòu)建角色列表 List<GrantedAuthority> grantedAuths = new ArrayList<GrantedAuthority>(); grantedAuths.add(new SimpleGrantedAuthority('ROLE_SELLER')); // 根據(jù)用戶(hù)名獲取用戶(hù) // 判斷用戶(hù)是否存在 if (Objects.equals('admin', s)) { // 構(gòu)建一個(gè) User 返回,Security 會(huì)自動(dòng)核驗(yàn)密碼 userDetails = new User('admin','123456', grantedAuths); } return userDetails; }}

☞ 認(rèn)證管理器

<!-- 認(rèn)證管理器 --><authentication-manager> <authentication-provider user-service-ref='userDetailService'></authentication-provider></authentication-manager><beans:bean class='com.software.controller.UserDetailsServiceImpl'></beans:bean>

1.2 加密

1.2.1 BCrypt 加密算法

 用戶(hù)表的密碼通常使用 MD5 等不可逆算法加密后存儲(chǔ),為防止彩虹表破解更會(huì)先使用一個(gè)特定的字符串加密,然后再使用一個(gè)隨機(jī)的 salt(鹽值) 加密。 特定字符串是程序代碼中固定的,salt 是每個(gè)密碼單獨(dú)隨機(jī),一般給用戶(hù)表加一個(gè)字段單獨(dú)存儲(chǔ),比較麻煩。 BCrypt 算法將 salt 隨機(jī)并混入最終加密后的密碼,驗(yàn)證時(shí)也無(wú)需單獨(dú)提供之前的 salt,從而無(wú)需單獨(dú)處理 salt 問(wèn)題。

☞ 配置加密

<!-- 認(rèn)證管理器 --><authentication-manager> <authentication-provider user-service-ref='userDetailService'> <password-encoder ref='passwordEncoder'></password-encoder> </authentication-provider></authentication-manager><beans:bean class='com.software.controller.UserDetailsServiceImpl'></beans:bean><!-- 定義 spring security 安全加密算法對(duì)象 --><beans:bean class='org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder'></beans:bean>

☞ 加密

/** * Created with IntelliJ IDEA. * * @author Demo_Null * @date 2020/10/12 * @description BCrypt 加密 */public class UserDetailsServiceImpl implements UserDetailsService { public UserDetails loadUserByUsername(String s) throws UsernameNotFoundException { // UserDetails 對(duì)象 UserDetails userDetails = null; // 構(gòu)建角色列表 List<GrantedAuthority> grantedAuths = new ArrayList<GrantedAuthority>(); grantedAuths.add(new SimpleGrantedAuthority('ROLE_SELLER')); // 根據(jù)用戶(hù)名獲取用戶(hù) // 判斷用戶(hù)是否存在 if (Objects.equals('admin', s)) { // 模擬密碼已加密 BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder(); String encode = bCryptPasswordEncoder.encode('123456'); // 構(gòu)建一個(gè) User 返回,Security 會(huì)自動(dòng)核驗(yàn)密碼 userDetails = new User('admin',encode, grantedAuths); } return userDetails; }}

1.2.2 自定義加密算法

☞ 自定義加密算法

/** * Created with IntelliJ IDEA. * * @author Demo_Null * @date 2020/10/12 * @description 加密工具類(lèi) */ public class MD5Util { private static final String SALT = 'Demo_Null'; 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(); }}

☞ 自定義加密

/** * Created with IntelliJ IDEA. * * @author Demo_Null * @date 2020/10/12 * @description 自定義加密算法 */public class MyPasswordEncoder implements PasswordEncoder { @Override public String encode(CharSequence charSequence) { return MD5Util.encode((String)charSequence); } @Override public boolean matches(CharSequence charSequence, String s) { return s.equals(MD5Util.encode((String)charSequence)); }}

☞ 修改安全加密算法對(duì)象

<!-- 認(rèn)證管理器 --> <authentication-manager> <authentication-provider user-service-ref='userDetailService'> <password-encoder ref='passwordEncoder'></password-encoder> </authentication-provider> </authentication-manager> <beans:bean class='com.software.controller.UserDetailsServiceImpl'></beans:bean> <!-- 定義 spring security 安全加密算法對(duì)象 --> <beans:bean class='com.software.controller.MyPasswordEncoder'></beans:bean>

到此這篇關(guān)于Spring Security 安全認(rèn)證的示例代碼的文章就介紹到這了,更多相關(guān)Spring Security 安全認(rèn)證內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Spring
相關(guān)文章:
主站蜘蛛池模板: 县级市| 昌江| 将乐县| 德保县| 贺兰县| 巴林左旗| 通海县| 珠海市| 旅游| 舒兰市| 巴楚县| 公安县| 延边| 沙坪坝区| 永嘉县| 乌兰县| 新沂市| 磐安县| 宜宾县| 葫芦岛市| 韶山市| 屏山县| 茶陵县| 株洲县| 慈溪市| 武城县| 潮州市| 芦山县| 巴青县| 石阡县| 卢湾区| 顺义区| 都安| 长寿区| 涟水县| 陇南市| 通榆县| 剑川县| 青岛市| 禄丰县| 贵南县|