Autenticação com Spring Security

Galera, estou com um problema e preciso da ajuda de vocês. Tentei achar aqui no fórum, porém apenas vi coisas incompletas.

Estou precisando apenas fazer uma autenticação com um banco de dados, porém teria que realizar essa autenticação fora do xml.

para isso eu preciso setar um bean

[code]

		<password-encoder ref="passwordEncoder" />
		
		<jdbc-user-service data-source-ref="conexao" 
			users-by-username-query="SELECT ID as username, SENHA as password, 'true' as enable FROM DCT_PROD_TDM.T047_USUARIOS_APLICACAO WHERE ID = ?"
			authorities-by-username-query="SELECT ID as username, 'ROLE_USER' as authority FROM DCT_PROD_TDM.T047_USUARIOS_APLICACAO WHERE ID = ?" />

	</authentication-provider>
</authentication-manager>
<beans:bean id="passwordEncoder" class="com.accenture.security.TrataSenha"/> 
<beans:bean name="conexao"
	class="org.springframework.jdbc.datasource.DriverManagerDataSource">
	<beans:property name="driverClassName" value="com.teradata.jdbc.TeraDriver" />
	<beans:property name="url" value="jdbc:teradata://10.32.203.64/CHARSET=UTF8" />
	<beans:property name="username" value="DCT_APP_USER" />
	<beans:property name="password" value="telemar" />
</beans:bean>	

</beans:beans>
[/code]

ai indo pra classe eu tenho que implementar PasswordEncoder correto?

public class TratarSenha implements PasswordEncoder{

	@Override
	public String encodePassword(String senha, Object arg1) {
		MessageDigest md = null; 
		String senhaHash = null;
    	try { 
	    	md = MessageDigest.getInstance("MD5"); 
	    	byte[] senhaBytes = senha.getBytes("UTF-16LE"); 
	    	byte[] hash = md.digest(senhaBytes); 
	    	senhaHash = Util.encodeBase64(hash);
    	} catch (Exception e) { 
    		e.printStackTrace(); 
    	} 
    	
		return senhaHash;
	}

	@Override
	public boolean isPasswordValid(String encPass, String rawPass, Object arg2) {
		// TODO Auto-generated method stub
		return false;
	}

a minha dúvida é como preencher esse método isPasswordValid (ele é booleando, ou seja, ele vai validar se o encodePassword é valido, correto? porém não sei como)

outra dúvida é eu apenas preciso isso para pegar uma senha criptografada do meu banco e autenticar, isso já irá realizar essa tarefa?

o spring automaticamente vai vir nessa minha classe e fazer o tratamento a partir da senha q eu colocar no formulário para logar no sistema?

Att,
Francisco Amaral

não seria mais facil voce só colocar

no lugar do seu

o spring já tem um modulo para tratar Criptografia MD5 entre outros…

[quote=darklordkamui]não seria mais facil voce só colocar

no lugar do seu

o spring já tem um modulo para tratar Criptografia MD5 entre outros…[/quote]

poderia o problema é o seguinte.

A senha foi gerada por um programa VBA, também usando MD5…o pulo do gato é que o método VBA que faz essa criptografia pro MD5 utiliza o código que em Java equivalente ao usado é “UTF-16LE”

o MD5 gerado pelo spring é diferente, justamente por conta desse problema.
Cheguei até este código abaixo, e por isso queria implementar a minha própria autenticação.

	public String encodePassword(String senha, Object arg1) {
		MessageDigest md = null; 
		String senhaHash = null;
    	try { 
	    	md = MessageDigest.getInstance("MD5"); 
	    	byte[] senhaBytes = senha.getBytes("UTF-16LE"); 
	    	byte[] hash = md.digest(senhaBytes); 
	    	senhaHash = Util.encodeBase64(hash);
    	} catch (Exception e) { 
    		e.printStackTrace(); 
    	} 
    	
		return senhaHash;
	}

abs,

entendi…

olha os links e ve se ajuda…

quando conseguir posta aqui, pode ser muito util para outras pessoas no futuro quem sabe…

http://www.jarvana.com/jarvana/view/org/springframework/security/spring-security-core/3.0.5.RELEASE/spring-security-core-3.0.5.RELEASE-sources.jar!/org/springframework/security/authentication/encoding/LdapShaPasswordEncoder.java?format=ok

http://sziebert.net/posts/using-bcrypt-with-spring-security/

[quote=darklordkamui]entendi…

olha os links e ve se ajuda…

quando conseguir posta aqui, pode ser muito util para outras pessoas no futuro quem sabe…

http://www.jarvana.com/jarvana/view/org/springframework/security/spring-security-core/3.0.5.RELEASE/spring-security-core-3.0.5.RELEASE-sources.jar!/org/springframework/security/authentication/encoding/LdapShaPasswordEncoder.java?format=ok

http://sziebert.net/posts/using-bcrypt-with-spring-security/[/quote]

Dark,

quando eu uso essa configuração dentro do applicationContext.xml no qual vem toda a configuração do Spring Security ele da erro

<authentication-provider user-service-ref="userService">
    <password-encoder ref="passwordEncoder"/>
</authentication-provider>
 
<beans:bean id="passwordEncoder" class="net.sziebert.tutorials.security.BCryptPasswordEncoder"/>

[quote=fagajr][quote=darklordkamui]entendi…

olha os links e ve se ajuda…

quando conseguir posta aqui, pode ser muito util para outras pessoas no futuro quem sabe…

http://www.jarvana.com/jarvana/view/org/springframework/security/spring-security-core/3.0.5.RELEASE/spring-security-core-3.0.5.RELEASE-sources.jar!/org/springframework/security/authentication/encoding/LdapShaPasswordEncoder.java?format=ok

http://sziebert.net/posts/using-bcrypt-with-spring-security/[/quote]

Dark,

quando eu uso essa configuração dentro do applicationContext.xml no qual vem toda a configuração do Spring Security ele da erro

[code]


<beans:bean id=“passwordEncoder” class=“net.sziebert.tutorials.security.BCryptPasswordEncoder”/>
[/code][/quote]

desculpa a demora só pude olhar agora…

mas que erro da??? ele nao encontra a classe?

[quote=darklordkamui][quote=fagajr][quote=darklordkamui]entendi…

olha os links e ve se ajuda…

quando conseguir posta aqui, pode ser muito util para outras pessoas no futuro quem sabe…

http://www.jarvana.com/jarvana/view/org/springframework/security/spring-security-core/3.0.5.RELEASE/spring-security-core-3.0.5.RELEASE-sources.jar!/org/springframework/security/authentication/encoding/LdapShaPasswordEncoder.java?format=ok

http://sziebert.net/posts/using-bcrypt-with-spring-security/[/quote]

Dark,

quando eu uso essa configuração dentro do applicationContext.xml no qual vem toda a configuração do Spring Security ele da erro

[code]


<beans:bean id=“passwordEncoder” class=“net.sziebert.tutorials.security.BCryptPasswordEncoder”/>
[/code][/quote]

desculpa a demora só pude olhar agora…

mas que erro da??? ele nao encontra a classe?[/quote]

simplesmente não compila e da erro 404 ao executar

[quote=fagajr][quote=darklordkamui][quote=fagajr][quote=darklordkamui]entendi…

olha os links e ve se ajuda…

quando conseguir posta aqui, pode ser muito util para outras pessoas no futuro quem sabe…

http://www.jarvana.com/jarvana/view/org/springframework/security/spring-security-core/3.0.5.RELEASE/spring-security-core-3.0.5.RELEASE-sources.jar!/org/springframework/security/authentication/encoding/LdapShaPasswordEncoder.java?format=ok

http://sziebert.net/posts/using-bcrypt-with-spring-security/[/quote]

Dark,

quando eu uso essa configuração dentro do applicationContext.xml no qual vem toda a configuração do Spring Security ele da erro

[code]


<beans:bean id=“passwordEncoder” class=“net.sziebert.tutorials.security.BCryptPasswordEncoder”/>
[/code][/quote]

desculpa a demora só pude olhar agora…

mas que erro da??? ele nao encontra a classe?[/quote]

simplesmente não compila e da erro 404 ao executar[/quote]

vc tem que criar um classe assim…

[code]public class BCryptPasswordEncoder implements PasswordEncoder {

public String encodePassword(String rawPass, Object salt) throws DataAccessException {
    logger.debug("Encoding password.");
    return BCrypt.hashpw(rawPass, BCrypt.gensalt());
}

public boolean isPasswordValid(String encPass, String rawPass, Object salt) throws DataAccessException {
    logger.debug("Validating password.");
    return BCrypt.checkpw(rawPass, encPass);
}

}[/code]

depois modificar no spring.xml

[code]

<beans:bean id=“passwordEncoder” class=“meu.pacote.BCryptPasswordEncoder”/>[/code]