最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring Security 安全認證的示例代碼

 更新時間:2020年10月16日 09:14:43   作者:Demo_Null  
這篇文章主要介紹了Spring Security 安全認證的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

1.1 動態(tài)用戶

1.1.1 放行資源

  如果我們再配置的時候沒有放行登錄頁等一些不需要登錄就可以看到的資源,那么訪問的時候就會全部攔截導致訪問不到。所以我們要配置放行一些無需登錄就可以看到的資源。

<?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.xsd
        http://www.springframework.org/schema/security 
        http://www.springframework.org/schema/security/spring-security.xsd">

  <!-- 設置頁面不登陸也可以訪問 -->
  <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>

  <!-- 頁面的攔截規(guī)則  use-expressions:是否啟動 SPEL 表達式 默認是 true -->
  <http use-expressions="false">
    <!-- 當前用戶必須有 ROLE_USER 的角色 才可以訪問根目錄及所屬子目錄的資源 -->
    <intercept-url pattern="/**" access="ROLE_USER"/>
    <!-- 開啟表單登陸功能 -->
    <form-login/>
  </http>

  <!-- 認證管理器 -->
  <authentication-manager>
    <authentication-provider>
      <user-service>
       <!-- 配置靜態(tài)用戶 -->
        <user name="admin" password="123456" authorities="ROLE_USER"/>
      </user-service>
    </authentication-provider>
  </authentication-manager>

</beans:beans>

1.1.2 動態(tài)用戶

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

☞ 認證類

/**
 * Created with IntelliJ IDEA.
 *
 * @author Demo_Null
 * @date 2020/10/12
 * @description 認證類
 */
public class UserDetailsServiceImpl implements UserDetailsService {
  public UserDetails loadUserByUsername(String s) throws UsernameNotFoundException {
    // UserDetails 對象
    UserDetails userDetails = null;
    
    // 構建角色列表
    List<GrantedAuthority> grantedAuths = new ArrayList<GrantedAuthority>();
    grantedAuths.add(new SimpleGrantedAuthority("ROLE_SELLER"));

    // 根據(jù)用戶名獲取用戶

    // 判斷用戶是否存在
    if (Objects.equals("admin", s)) {
      // 構建一個 User 返回,Security 會自動核驗密碼
      userDetails = new User("admin","123456", grantedAuths);
    }

    return userDetails;

  }
}

☞ 認證管理器

<!-- 認證管理器 -->
<authentication-manager>
  <authentication-provider user-service-ref="userDetailService"></authentication-provider>
</authentication-manager>
<beans:bean id="userDetailService" class="com.software.controller.UserDetailsServiceImpl"></beans:bean>

1.2 加密

1.2.1 BCrypt 加密算法

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

☞ 配置加密

<!-- 認證管理器 -->
<authentication-manager>
  <authentication-provider user-service-ref="userDetailService">
    <password-encoder ref="passwordEncoder"></password-encoder>
  </authentication-provider>
</authentication-manager>
<beans:bean id="userDetailService" class="com.software.controller.UserDetailsServiceImpl"></beans:bean>

<!-- 定義 spring security 安全加密算法對象 -->
<beans:bean id="passwordEncoder" 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 對象
    UserDetails userDetails = null;

    // 構建角色列表
    List<GrantedAuthority> grantedAuths = new ArrayList<GrantedAuthority>();
    grantedAuths.add(new SimpleGrantedAuthority("ROLE_SELLER"));

    // 根據(jù)用戶名獲取用戶

    // 判斷用戶是否存在
    if (Objects.equals("admin", s)) {
      // 模擬密碼已加密
      BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder();
      String encode = bCryptPasswordEncoder.encode("123456");


      // 構建一個 User 返回,Security 會自動核驗密碼
      userDetails = new User("admin",encode, grantedAuths);
    }

    return userDetails;

  }
}

1.2.2 自定義加密算法

☞ 自定義加密算法

/**
 * Created with IntelliJ IDEA.
 *
 * @author Demo_Null
 * @date 2020/10/12
 * @description 加密工具類
 */ 
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));
  }
}

☞ 修改安全加密算法對象

  <!-- 認證管理器 -->
  <authentication-manager>
    <authentication-provider user-service-ref="userDetailService">
      <password-encoder ref="passwordEncoder"></password-encoder>
    </authentication-provider>
  </authentication-manager>
  <beans:bean id="userDetailService" class="com.software.controller.UserDetailsServiceImpl"></beans:bean>

  <!-- 定義 spring security 安全加密算法對象 -->
  <beans:bean id="passwordEncoder" class="com.software.controller.MyPasswordEncoder"></beans:bean>

到此這篇關于Spring Security 安全認證的示例代碼的文章就介紹到這了,更多相關Spring Security 安全認證內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Spring Boot應用Docker化的步驟詳解

    Spring Boot應用Docker化的步驟詳解

    這篇文章主要給大家介紹了關于Spring Boot應用Docker化的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2018-04-04
  • maven在settings.xml和pom.xml中指定jdk版本編譯的方法

    maven在settings.xml和pom.xml中指定jdk版本編譯的方法

    在開發(fā)Java應用時,通常需要指定要使用的Java版本,下面這篇文章主要給大家介紹了關于maven在settings.xm和pom.xml中指定jdk版本編譯的方法,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-05-05
  • Java截取特定兩個標記之間的字符串實例

    Java截取特定兩個標記之間的字符串實例

    下面小編就為大家?guī)硪黄狫ava截取特定兩個標記之間的字符串實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • 新手小白學JAVA 日期類Date SimpleDateFormat Calendar(入門)

    新手小白學JAVA 日期類Date SimpleDateFormat Calendar(入門)

    本文主要介紹了JAVA 日期類Date SimpleDateFormat Calendar,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • Java關于List集合去重方案詳細介紹

    Java關于List集合去重方案詳細介紹

    實際項目開發(fā)中,很多業(yè)務場景下都會遇見集合去重。在說到List集合去重之前,首先我們回顧下普通類型的list如何去重
    2021-09-09
  • 如何在Redis中實現(xiàn)分頁排序查詢過程解析

    如何在Redis中實現(xiàn)分頁排序查詢過程解析

    這篇文章主要介紹了如何在Redis中實現(xiàn)分頁排序查詢過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07
  • SpringBoot調用DeepSeek?API的完整操作指南

    SpringBoot調用DeepSeek?API的完整操作指南

    這篇文章主要為大家詳細介紹了SpringBoot調用DeepSeek?API的完整操作指南,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2025-02-02
  • Java面試題沖刺第二十七天--JVM2

    Java面試題沖刺第二十七天--JVM2

    這篇文章主要為大家分享了最有價值的三道關于JVM的面試題,涵蓋內容全面,包括數(shù)據(jù)結構和算法相關的題目、經(jīng)典面試編程題等,感興趣的小伙伴們可以參考一下
    2021-08-08
  • SpringBoot集成Nacos實現(xiàn)注冊中心與配置中心流程詳解

    SpringBoot集成Nacos實現(xiàn)注冊中心與配置中心流程詳解

    這篇文章主要介紹了SpringBoot集成Nacos實現(xiàn)注冊中心與配置中心流程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2023-02-02
  • Mybatis使用@one和@Many實現(xiàn)一對一及一對多關聯(lián)查詢

    Mybatis使用@one和@Many實現(xiàn)一對一及一對多關聯(lián)查詢

    本文主要介紹了Mybatis使用@one和@Many實現(xiàn)一對一及一對多關聯(lián)查詢,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09

最新評論

册亨县| 巴彦淖尔市| 洪江市| 屏山县| 海原县| 乡宁县| 南开区| 延寿县| 文安县| 新民市| 丰顺县| 泗水县| 南召县| 凤庆县| 浦县| 南宁市| 临沂市| 金华市| 德州市| 甘谷县| 西安市| 舞钢市| 红原县| 普格县| 黑河市| 昂仁县| 汝城县| 太仓市| 麻江县| 克什克腾旗| 将乐县| 嵩明县| 应用必备| 兴海县| 淮阳县| 宜兰市| 安福县| 英超| 雷山县| 庐江县| 昌宁县|