spring security 密码编码器

 

spring security 密码编码器

  (2011-07-19 10:28:34)
标签: 

spring

 

security

 

密码编码器

 

it

分类: 架构与开发
我们还进行了md5密码扩展,这也要在Security框架进行配置,在表中插入一些信息,就可以进行数据库验证了,此时Security框架的配置如下,修改认证管理器:
Xml代码
  1. <security:authentication-manager>  
  2.     <security:authentication-provider>  
  3.         <security:password-encoder ref="md5Encoder" />  
  4.         <security:jdbc-user-service data-source-ref="dataSource" />  
  5.     </security:authentication-provider>  
  6. </security:authentication-manager>  


    这里我们配置了jdbc数据源和密码编码器,因为连MD5加密方式也是我们自定义的,这样安全系数更高。要使用自定义的加密器,别忘了编写加密器的bean。

Xml代码
  1. <bean id="md5Encoder" class="org.ourpioneer.board.util.MD5Encoder" />  


    加密器类需要实现PasswordEncoder接口,然后编写我们自己的加密方案,加密器很简单,如下设计:

Java代码
  1. package org.ourpioneer.board.util;   
  2. import org.springframework.dao.DataAccessException;   
  3. import org.springframework.security.authentication.encoding.PasswordEncoder;   
  4. public class MD5Encoder implements PasswordEncoder {   
  5.     public String encodePassword(String origPwd, Object salt)   
  6.             throws DataAccessException {   
  7.         return MD5.getMD5ofStr(origPwd);   
  8.     }   
  9.     public boolean isPasswordValid(String encPwd, String origPwd, Object salt)   
  10.             throws DataAccessException {   
  11.         return encPwd.equals(encodePassword(origPwd, salt));   
  12.     }   
  13. }  


    其中使用到的MD5加密类为:

Java代码
  1. package org.ourpioneer.board.util;   
  2. import java.security.MessageDigest;   
  3.   
  4. public class MD5 {   
  5.       
  6.     public static String getMD5ofStr(String origString) {   
  7.         String origMD5 = null;   
  8.         try {   
  9.             MessageDigest md5 = MessageDigest.getInstance("MD5");   
  10.             byte[] result = md5.digest(origString.getBytes());   
  11.             origMD5 = byteArray2HexStr(result);   
  12.         } catch (Exception e) {   
  13.             e.printStackTrace();   
  14.         }   
  15.         return origMD5;   
  16.     }   
  17.       
  18.     private static String byteArray2HexStr(byte[] bs) {   
  19.         StringBuffer sb = new StringBuffer();   
  20.         for (byte b : bs) {   
  21.             sb.append(byte2HexStr(b));   
  22.         }   
  23.         return sb.toString();   
  24.     }   
  25.       
  26.     private static String byte2HexStr(byte b) {   
  27.         String hexStr = null;   
  28.         int n = b;   
  29.         if (n < 0) {   
  30.             // 若需要自定义加密,请修改这个移位算法即可   
  31.             n = b & 0x7F + 128;   
  32.         }   
  33.         hexStr = Integer.toHexString(n / 16) + Integer.toHexString(n % 16);   
  34.         return hexStr.toUpperCase();   
  35.     }   
  36.       
  37.     public static String getMD5ofStr(String origString, int times) {   
  38.         String md5 = getMD5ofStr(origString);   
  39.         for (int i = 0; i < times - 1; i++) {   
  40.             md5 = getMD5ofStr(md5);   
  41.         }   
  42.         return getMD5ofStr(md5);   
  43.     }   
  44.       
  45.     public static boolean verifyPassword(String inputStr, String MD5Code) {   
  46.         return getMD5ofStr(inputStr).equals(MD5Code);   
  47.     }   
  48.       
  49.     public static boolean verifyPassword(String inputStr, String MD5Code,   
  50.             int times) {   
  51.         return getMD5ofStr(inputStr, times).equals(MD5Code);   
  52.     }   
  53.       
  54.     public static void main(String[] args) {   
  55.         System.out.println("123:" + getMD5ofStr("123"));   
  56.         System.out.println("123456789:" + getMD5ofStr("123456789"));   
  57.         System.out.println("pioneer:" + getMD5ofStr("pioneer"));   
  58.         System.out.println("123:" + getMD5ofStr("123"4));   
  59.     }   
  60. }  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值