2011-05-20 48 views
0

我正在用Spring roo開發一個應用程序。 作爲一個暗示Spring安全性的第一個認證測試,我對數據庫中的一個表使用了身份驗證。這做工精細:身份驗證base64

<authentication-manager alias="authenticationManager"> 
     <authentication-provider> 
      <jdbc-user-service data-source-ref="dataSource" authorities-by-username-query="select username,authority from users where username=?"/> 
     </authentication-provider> 
    </authentication-manager> 

現在事情變得更具挑戰性(對我來說),因爲在「真實」(生產ENV)用戶表中的密碼是加密的,我必須首先使用散列函數MD5然後base64編碼以及iso來處理特殊字符。

我必須創建一個自定義的jdbc用戶服務。處理這些操作的最佳做​​法是什麼?

+0

你有沒有看着現有的密碼編碼功能,使用Spring Security? – 2011-05-24 15:34:31

+0

是的。這是非常好的,但不幸的是,用於現有用戶名和密碼的編碼方法是一種奇特的,我必須建立它... – gpasse 2011-05-24 15:40:01

+0

對,我明白了,但如果你看看現有的實現,你應該有一些好如何實現這一點的指針。我不明白爲什麼你需要一個自定義的JDBC用戶服務,連接到你的用戶詳細信息服務的密碼編碼器實現應該工作正常。 – 2011-05-24 19:18:04

回答

2

如上所述,我設法解決了Spring安全構建身份驗證問題。

我第一次到安全的context.xml的編碼設置爲ISO-8859-1

<?xml version="1.0" encoding="ISO-8859-1"?> 

然後使用:

<password-encoder hash="md5" base64="true" ></password-encoder> 
1

首先要做的是創建一個自定義密碼編碼器,這將允許我更多地控制認證過程。

  1. ApplicationContext中的-security.xml文件

  2. 創建自定義類

    公共類SnatiPasswordEncoder實現{的PasswordEncoder

    @Override 
    public String encodePassword(String arg0, Object arg1) 
         throws DataAccessException { 
        // TODO Auto-generated method stub 
        return null; 
    } 
    
    @Override 
    public boolean isPasswordValid(String arg0, String arg1, Object arg2) 
         throws DataAccessException { 
        // TODO Auto-generated method stub 
        return false; 
    } 
    
    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
        // TODO Auto-generated method stub 
    
    } 
    

    }

應該怎樣來下?