Java代码
<bean id="daoAuthenticationProvider" class="org.acegisecurity.providers.dao.DaoAuthenticationProvider"> <property name="userDetailsService" ref="userDetailsService" /> <property name="passwordEncoder"> <bean class="org.acegisecurity.providers.encoding.ShaPasswordEncoder"> <constructor-arg value="SHA-256" /> <property name="encodeHashAsBase64" value="false" /> </bean> </property> </bean> 上述配置只是在Acegi通过表单提交的用户认证信息中的密码做各种加密操作。而我们存储用户密码的时候,可以通过一下程序完成用户密码操作:
Java代码
package com.brofe.acegi; import org.acegisecurity.providers.encoding.Md5PasswordEncoder; import org.acegisecurity.providers.encoding.ShaPasswordEncoder; public class TestPasswordEncoder { public static void main(String[] args) throws Exception { md5(); // 使用简单的MD5加密方式 sha_256(); // 使用256的哈希算法(SHA)加密 sha_SHA_256(); // 使用SHA-256的哈希算法(SHA)加密 md5_SystemWideSaltSource(); // 使用MD5再加全局加密盐加密的方式加密 } public static void md5() { Md5PasswordEncoder md5 = new Md5PasswordEncoder(); // false 表示:生成32位的Hex版, 这也是encodeHashAsBase64的, Acegi 默认配置; true 表示:生成24位的Base64版 md5.setEncodeHashAsBase64(false); String pwd = md5.encodePassword("123", null); System.out.println("MD5: " + pwd + " len=" + pwd.length()); } public static void sha_256() { ShaPasswordEncoder sha = new ShaPasswordEncoder(256); sha.setEncodeHashAsBase64(false); String pwd = sha.encodePassword("123", null); System.out.println("哈希算法 256: " + pwd + " len=" + pwd.length()); } public static void sha_SHA_256() { ShaPasswordEncoder sha = new ShaPasswordEncoder(); sha.setEncodeHashAsBase64(false); String pwd = sha.encodePassword("123", null); System.out.println("哈希算法 SHA-256: " + pwd + " len=" + pwd.length()); } public static void md5_SystemWideSaltSource () { Md5PasswordEncoder md5 = new Md5PasswordEncoder(); md5.setEncodeHashAsBase64(false); // 使用动态加密盐的只需要在注册用户的时候将第二个参数换成用户名即可 String pwd = md5.encodePassword("123", "acegisalt"); System.out.println("MD5 SystemWideSaltSource: " + pwd + " len=" + pwd.length()); } }