Spring Security加密策略

转载 2015年07月07日 14:38:38

原文网址:http://blog.csdn.net/hz_blog/article/details/8426625 

Acegi 对于密码提供三种方式:明文及不采用任何加密方式、MD5加密方式、哈希算法加密方式。

只需要在DAO的认证管理器中分别加入以下对应配置:

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

[html] view plaincopy
  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方式加密

[html] view plaincopy
  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代码
[html] view plaincopy
  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加密,并添加动态加密盐
[html] view plaincopy
  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

[html] view plaincopy
  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
[html] view plaincopy
  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通过表单提交的用户认证信息中的密码做各种加密操作。而我们存储用户密码的时候,可以通过一下程序完成用户密码操作:

[java] view plaincopy
  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. }  

【Jenkins系列之五】Jenins安全管理和权限控制

我们要达到这样的效果:Jenkins 从Github上获取代码并执行测试,并将测试结果通过Email通知我们。分别在masger和slave机器上执行该构建过程。 【安装插件】 由于jenkins要从...
  • liuchunming033
  • liuchunming033
  • 2015年09月22日 16:50
  • 1711

Spring security用户验证机制浅谈.

1.  首先CustomUserDetailsService需要实现UserDetailsService(org.springframework.security.core.userdetails.U...
  • DR_LF
  • DR_LF
  • 2015年01月10日 11:07
  • 1289

CentOS 7 设置密码规则

出于安全考虑设置密码规则 设置密码到期的天数。 用户必须在天内更改密码。 此设置仅影响创建用户,而不会影响现有用户。 如果设置为现有用户,请运行命令“chage -M(days)...
  • wh211212
  • wh211212
  • 2017年01月03日 11:22
  • 4112

spring security 安全策略加密解密处理过程

1.现在后台生成密钥对,把得到公钥的加密系数,加密指数,传个前台登录界面,进行加密 //rsa生成密钥对,和加密解密函数。 public class RSAUtil { private sta...
  • qq_17641373
  • qq_17641373
  • 2015年03月04日 10:35
  • 740

spring security 自定义退出策略

项目需要,要求登录用户非空闲状态,不可退出。说白了就是,在退出的时候增加逻辑判断,如果状态为非空,就不让其退出。 仔细查看spring security文档,发现这个框架里维护了一个过滤器链,来提供...
  • huangmingleiluo
  • huangmingleiluo
  • 2017年11月19日 23:39
  • 47

spring security 个性化登录策略

最近做一个项目,安全框架采用spring security 。由于业务需要,要限制一个账户只能登录一次,不能在多个浏览器登录,也就是一个账户只能对应一个sessionid。这个很好实现,配置上默认的 ...
  • huangmingleiluo
  • huangmingleiluo
  • 2017年11月16日 00:13
  • 46

Spring security3的MD5加密和StandardPasswordEncoder的配置详解

1、MD5加盐值进行加密处理 application-security.xml文件配置:
  • u012772007
  • u012772007
  • 2014年07月31日 19:44
  • 9304

Spring Security 4.x 启用BCrypt加密

10.3 Password Encoding Spring Security’s PasswordEncoder interface is used to support the...
  • jxchallenger
  • jxchallenger
  • 2017年02月28日 20:32
  • 305

Spring Security 3.1 中功能强大的加密工具 PasswordEncoder

去年发生的密码泄漏事件,我们也对密码加密做了重新研究。       在筛选加密方法的过程中,发现了Spring Security 3.1.0版本中提供了新的PasswordEncoder,它的加密...
  • qq_20545159
  • qq_20545159
  • 2016年08月29日 18:40
  • 2586

spring security3.x学习(18)_salt以及Bcrypt加密

其实,对于基本的权限基础操作我们已经学的差不多了,接下来应该都是一堆复杂或深入的知识了,。呵呵。不过越学越有点意思了。这3天假期也没有浪费啊。  这次看一下登录的加密: ...
  • dulei294948
  • dulei294948
  • 2013年09月20日 17:49
  • 2269
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Spring Security加密策略
举报原因:
原因补充:

(最多只允许输入30个字)