2011-05-20 152 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 
    
    } 
    

    }

应该怎样来下?