`

Spring Security加密策略(转载)

阅读更多

转载自:http://blog.csdn.net/hz_blog/article/details/8426625?reload

 

Acegi 对于密码提供三种方式:明文及不采用任何加密方式、MD5加密方式、哈希算法加密方式。
只需要在DAO的认证管理器中分别加入以下对应配置:

第一种:不使用任何加密方式的配置


  1. <bean id="daoAuthenticationProvider"  
  2.     class="org.acegisecurity.providers.dao.DaoAuthenticationProvider">  
  3.     <property name="userDetailsService" ref="userDetailsService" />  
  4.   
  5.     <!-- 明文加密,不使用任何加密算法, 在不指定该配置的情况下,Acegi默认采用的就是明文加密 -->  
  6.     <!-- <property name="passwordEncoder"> <bean class="org.acegisecurity.providers.encoding.PlaintextPasswordEncoder">   
  7.         <property name="ignorePasswordCase" value="true"></property> </bean> </property> -->  
  8. </bean>  


第二种:MD5方式加密

  1. <bean id="daoAuthenticationProvider" class="org.acegisecurity.providers.dao.DaoAuthenticationProvider">     
  2.     <property name="userDetailsService" ref="userDetailsService" />     
  3.     
  4.     <property name="passwordEncoder">     
  5.         <bean class="org.acegisecurity.providers.encoding.Md5PasswordEncoder">     
  6.             <!-- false 表示:生成32位的Hex版, 这也是encodeHashAsBase64的, Acegi 默认配置; true  表示:生成24位的Base64版 -->     
  7.             <property name="encodeHashAsBase64" value="false" />     
  8.         </bean>     
  9.     </property>     
  10. </bean>      


第三种:使用MD5加密,并添加全局加密盐

Java代码
  1. <bean id="daoAuthenticationProvider" class="org.acegisecurity.providers.dao.DaoAuthenticationProvider">     
  2.     <property name="userDetailsService" ref="userDetailsService" />     
  3.     
  4.     <property name="passwordEncoder">     
  5.         <bean class="org.acegisecurity.providers.encoding.Md5PasswordEncoder">     
  6.             <property name="encodeHashAsBase64" value="false" />     
  7.         </bean>     
  8.     </property>     
  9.     
  10.     <!-- 对密码加密算法中使用特定的加密盐及种子 -->     
  11.     <property name="saltSource">     
  12.         <bean class="org.acegisecurity.providers.dao.salt.SystemWideSaltSource">     
  13.             <property name="systemWideSalt" value="acegisalt" />     
  14.         </bean>     
  15.     </property>     
  16. </bean>    


第四种:使用MD5加密,并添加动态加密盐

  1. <bean id="daoAuthenticationProvider" class="org.acegisecurity.providers.dao.DaoAuthenticationProvider">     
  2.     <property name="userDetailsService" ref="userDetailsService" />     
  3.     
  4.     <property name="passwordEncoder">     
  5.         <bean class="org.acegisecurity.providers.encoding.Md5PasswordEncoder">     
  6.             <property name="encodeHashAsBase64" value="false" />     
  7.         </bean>     
  8.     </property>     
  9.     
  10.     <!-- 对密码加密算法中使用特定的加密盐及种子 -->     
  11.     <property name="saltSource">     
  12.         <!-- 通过动态的加密盐进行加密,该配置通过用户名提供加密盐, 通过UserDetails的getUsername()方式 -->     
  13.          <bean class="org.acegisecurity.providers.dao.salt.ReflectionSaltSource">     
  14.             <property name="userPropertyToUse" value="getUsername" />     
  15.          </bean>     
  16.     </property>     
  17. </bean>   

 

第五种:使用哈希算法加密,加密强度为256

  1. <bean id="daoAuthenticationProvider" class="org.acegisecurity.providers.dao.DaoAuthenticationProvider">     
  2.     <property name="userDetailsService" ref="userDetailsService" />     
  3.     
  4.     <property name="passwordEncoder">     
  5.         <bean class="org.acegisecurity.providers.encoding.ShaPasswordEncoder">     
  6.             <constructor-arg value="256" />     
  7.             <property name="encodeHashAsBase64" value="false" />     
  8.         </bean>     
  9.     </property>     
  10. </bean>    

第六种:使用哈希算法加密,加密强度为SHA-256

  1. <bean id="daoAuthenticationProvider" class="org.acegisecurity.providers.dao.DaoAuthenticationProvider">     
  2.     <property name="userDetailsService" ref="userDetailsService" />     
  3.     
  4.     <property name="passwordEncoder">     
  5.         <bean class="org.acegisecurity.providers.encoding.ShaPasswordEncoder">     
  6.             <constructor-arg value="SHA-256" />     
  7.             <property name="encodeHashAsBase64" value="false" />     
  8.         </bean>     
  9.     </property>     
  10. </bean>    


上述配置只是在Acegi通过表单提交的用户认证信息中的密码做各种加密操作。而我们存储用户密码的时候,可以通过一下程序完成用户密码操作:

  1. package org.hz.test;  
  2.   
  3. import java.security.NoSuchAlgorithmException;  
  4.   
  5. import org.springframework.security.authentication.encoding.Md5PasswordEncoder;  
  6. import org.springframework.security.authentication.encoding.ShaPasswordEncoder;  
  7.   
  8. public class MD5Test {  
  9.     public static void md5() {     
  10.         Md5PasswordEncoder md5 = new Md5PasswordEncoder();     
  11.         // false 表示:生成32位的Hex版, 这也是encodeHashAsBase64的, Acegi 默认配置; true  表示:生成24位的Base64版     
  12.         md5.setEncodeHashAsBase64(false);     
  13.         String pwd = md5.encodePassword("1234"null);     
  14.         System.out.println("MD5: " + pwd + " len=" + pwd.length());     
  15.     }  
  16.     public static void sha_256() throws NoSuchAlgorithmException {       
  17.         ShaPasswordEncoder sha = new ShaPasswordEncoder(256);     
  18.         sha.setEncodeHashAsBase64(true);     
  19.         String pwd = sha.encodePassword("1234"null);     
  20.         System.out.println("哈希算法 256: " + pwd + " len=" + pwd.length());     
  21.     }     
  22.          
  23.         
  24.     public static void sha_SHA_256() {     
  25.         ShaPasswordEncoder sha = new ShaPasswordEncoder();     
  26.         sha.setEncodeHashAsBase64(false);     
  27.         String pwd = sha.encodePassword("1234"null);      
  28.         System.out.println("哈希算法 SHA-256: " + pwd + " len=" + pwd.length());     
  29.     }     
  30.          
  31.         
  32.     public static void md5_SystemWideSaltSource () {     
  33.         Md5PasswordEncoder md5 = new Md5PasswordEncoder();     
  34.         md5.setEncodeHashAsBase64(false);     
  35.              
  36.         // 使用动态加密盐的只需要在注册用户的时候将第二个参数换成用户名即可     
  37.         String pwd = md5.encodePassword("1234""acegisalt");     
  38.         System.out.println("MD5 SystemWideSaltSource: " + pwd + " len=" + pwd.length());     
  39.     }     
  40.     public static void main(String[] args) throws NoSuchAlgorithmException {  
  41.         md5(); // 使用简单的MD5加密方式     
  42.           
  43.         sha_256(); // 使用256的哈希算法(SHA)加密     
  44.              
  45.         sha_SHA_256(); // 使用SHA-256的哈希算法(SHA)加密     
  46.              
  47.         md5_SystemWideSaltSource(); // 使用MD5再加全局加密盐加密的方式加密      
  48.     }  
  49.       

  50. 转载自:http://blog.csdn.net/hz_blog/article/details/8426625?reload
分享到:
评论
2 楼 abc08010051 2015-01-15  
wzglovejava 写道
楼主你好,我们项目目前引入了spring security3.2,但是之前用户的密码,都是用的自定义的md5加密,在配置文件里面能否引用自定义的md5加密类,该怎么配置,能否提供优化方案。

<bean id="daoAuthenticationProvider" class="org.acegisecurity.providers.dao.DaoAuthenticationProvider">    
    <property name="userDetailsService" ref="userDetailsService" />    
   
    <property name="passwordEncoder">    
        <bean class="org.acegisecurity.providers.encoding.Md5PasswordEncoder">    
            <!-- false 表示:生成32位的Hex版, 这也是encodeHashAsBase64的, Acegi 默认配置; true  表示:生成24位的Base64版 -->    
            <property name="encodeHashAsBase64" value="false" />    
        </bean>    
    </property>    
</bean>

把上面配置文件中定义passwordEncoder的地方
        <bean class="org.acegisecurity.providers.encoding.Md5PasswordEncoder">    
            <!-- false 表示:生成32位的Hex版, 这也是encodeHashAsBase64的, Acegi 默认配置; true  表示:生成24位的Base64版 -->    
            <property name="encodeHashAsBase64" value="false" />    
        </bean>   
换成你们自定义的md5加密类,看一下行不行
1 楼 wzglovejava 2015-01-14  
楼主你好,我们项目目前引入了spring security3.2,但是之前用户的密码,都是用的自定义的md5加密,在配置文件里面能否引用自定义的md5加密类,该怎么配置,能否提供优化方案。

相关推荐

    Spring security 自定义密码加密方式的使用范例。

    在Spring Security中,默认使用的是BCryptPasswordEncoder或者PBEWithMD5AndDES等加密算法。但为了满足特定需求,我们可以自定义密码编码器。下面是如何实现的步骤: 1. **创建自定义PasswordEncoder**:你需要创建...

    SpringBoot+SpringSecurity处理Ajax登录请求问题(推荐)

    SpringSecurity是一个基于Spring的安全框架,能够提供身份验证、授权和加密等功能。在本文中,我们将使用SpringBoot+SpringSecurity来处理Ajax登录请求问题。 知识点2:Ajax登录请求问题 在前后端分离的开发模式...

    Spring security认证授权

    Spring Security 是一个强大的和高度可定制的身份验证和访问控制框架,用于Java应用程序。它提供了全面的安全解决方案,包括用户认证、权限授权、会话管理、CSRF防护以及基于HTTP的访问控制。在这个例子中,我们将...

    Spring Security 教程(Spring Security Tutorial)1

    Spring Security 是一个强大的和高度可定制的身份验证和访问控制框架,用于保护基于 Java 的应用程序。本教程将逐步引导你理解并使用 Spring Security 进行安全控制。以下是对关键知识点的详细说明: 1. **Spring ...

    基本的spring mvc + spring security实现的登录(无数据库)

    在本项目中,我们主要探讨的是如何利用Spring MVC和Spring Security框架构建一个基本的无数据库登录系统。Spring MVC是Spring框架的一部分,用于处理Web应用程序的请求-响应模型,而Spring Security则是一个强大的...

    SpringSecurity.zip

    ​ Spring Security:spring家族一员。是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反转...

    初识 Spring Security - v1.1.pdf

    ### 初识 Spring Security #### 一、Spring Security 概述 **Spring Security**是一种广泛应用于Java企业级项目中的安全框架,它基于Spring AOP(面向切面编程)和Servlet过滤器来提供全面的安全解决方案。该框架...

    spring-security Jar包

    8. **自定义扩展**:Spring Security 的设计是模块化的,允许开发者根据需求添加或替换组件,如认证提供者、授权策略、加密机制等,以适应各种复杂的安全场景。 9. **安全性配置**:配置Spring Security 主要通过...

    Spring Security 把授权信息写入数据库

    【Spring Security 把授权信息写入数据库】 Spring Security是一个强大的安全管理框架,用于处理Java应用程序的安全需求,包括认证和授权。在从Acegi安全框架转换到Spring Security 2.0时,一个重要的变化就是如何...

    Spring Security如何使用URL地址进行权限控制

    Spring Security是一个功能强大且广泛应用的Java安全框架,它提供了许多功能,包括身份验证、授权、加密等。其中,权限控制是Spring Security的一个重要组件,它允许开发者根据用户角色和权限来控制访问不同的资源...

    IDEA+SpringBoot+SpringSecurity:整个SpringSecurity的实现过程,可应用于线上产品

    SpringSecurity是Java领域中一款强大的安全框架,广泛用于构建安全的Web应用。它提供了一整套解决方案,包括认证、授权、会话管理以及防止常见攻击等。本教程将基于IntelliJ IDEA(IDEA)和SpringBoot来详细介绍如何...

    springsecurity使用demo

    SpringSecurity 是一个强大的且高度可定制的身份验证和访问控制框架,用于保护基于Java的应用程序。在本示例中,我们将探讨如何使用 SpringSecurity 构建一个基本的认证和授权流程。 首先,Spring Security 的核心...

    springsecurity使用配置详解

    在提供的压缩包`springsecurity配置demo`中,你将找到示例代码和详细说明,这将帮助你更好地理解和实践上述概念。通过学习和实践这些示例,你将能够为自己的Spring应用程序构建强大的安全防护。

    Spring Security实战例子

    1. **Web安全配置**:在Spring Security中,我们通过实现 `WebSecurityConfigurerAdapter` 类来自定义Web安全策略。可以配置哪些URL需要保护,哪些可以匿名访问,以及如何进行身份验证。 2. **身份验证配置**:通常...

    SpringSecurity入门Demo实例

    当然,Spring Security的功能远不止这些,它还支持访问决策管理、CSRF防护、会话管理、记住我功能、密码加密等高级特性。这个入门Demo实例为我们提供了一个起点,通过深入学习和实践,我们可以更好地利用Spring ...

    SpringSecurity素材.zip

    7. **密码加密**:SpringSecurity支持多种密码加密策略,包括BCrypt、PBKDF2、SCrypt等,保证了用户密码的安全存储。 8. **国际化支持**:SpringSecurity提供了多语言支持,方便在不同地区部署的应用中使用。 9. *...

    微信扫一扫登录、微信支付、springsecurity&oauth2

    项目中使用到的技术包含SpringBoot、SpringSecurity&oauth2(安全资源和授权中心模式、包括登录接口自定义返回字段、自定义手机号+密码登录、自定义免密登录)、Queue队列、线程池、xss攻击配置、SpringCache、Mybatis...

    spring security 2 配置说明

    标题与描述均提到了“Spring Security 2 配置说明”,这表明文章旨在阐述Spring Security 2版本的配置细节,尤其是对于那些希望深入了解并正确应用该框架的安全特性开发者们。以下将基于给定的部分内容,深入解析...

    springsecurity所有jar包

    Spring Security 是一个强大的和高度可定制的身份验证和访问控制框架,用于Java应用程序。它为Web应用和企业级应用提供安全解决方案,包括用户认证、权限控制、会话管理等多个方面。在Spring Security 3.1.2版本中,...

Global site tag (gtag.js) - Google Analytics