RES: Spring Security e MD5

107 views
Skip to first unread message

Lessandro Notaroberto Pyrâmides

unread,
Jan 11, 2011, 10:53:31 AM1/11/11
to jav...@googlegroups.com

Como pode observar, eu também não estou misturando modelo com segurança.

A minha classe DAO é o service que ele utiliza... A modelagem é a mesma.

Abs

 

De: Lessandro Notaroberto Pyrâmides [mailto:lessandron...@gmail.com]
Enviada em: terça-feira, 11 de janeiro de 2011 12:13
Para: jav...@googlegroups.com
Assunto: Spring Security e MD5

 

Olá pessoal,  bom dia.

Estou tentando integrar a criptografia MD5 no spring security através do arquivo de configuração

xml, porém não estou conseguindo.

Alguém tem alguma dica de como realizar essa criptografia?

Já tentei algo nesse sentido, mas a autenticação não funcionou. Quando coloco uma senha desencriptografada o sistema

autentica normalmente. Segue um trecho da configuração:

 

    <sec:authentication-manager>

        <sec:authentication-provider user-service-ref="usuarioDAO" ref="daoAuthenticationProvider">

      <password-encoder hash="md5" />
        <sec:authentication-provider />

    </sec:authentication-manager>

 

    <bean id="daoAuthenticationProvider" class="org.springframework.security.authentication.dao.DaoAuthenticationProvider">

        <property name="userDetailsService" ref="usuarioDAO" />

   </bean>

 

Agradeço desde já,

Att,

Lessandro

Davinir F Campos Jr

unread,
Jan 11, 2011, 10:16:18 AM1/11/11
to jav...@googlegroups.com
Entendo...

Então sua classe UsuarioDAO não implementa a UserDetailsService (ou UserDetails, se bem que não faz nenhum sentido), não é? Porque se implementar, então sua infra-estrutura de acesso a dados está misturada com a "segurança".

E sua classe Usuario não implementa UserDetails (ou UserDetailsService, e segue o mesmo comentário dos parênteses anteriores), correto? Porque se implementar, então você está misturando modelo e "segurança".

Veja bem. É possivel funcionar, misturando tudo (creio eu). Aliás, eu até já vi implementações de modelos "Megazord". Só que não acho correto. Sob minha ótica, DAO é DAO, "segurança" é "segurança", modelo é modelo, e assim por diante.

Separe as responsabilidades. Separe os serviços do modelo. Comece simples, e evolua incremental. Experimente. Use os links que passei, use a aplicação de exemplo do Spring Security, e leia a documentação).

[ ]s
Davinir

--
Você recebeu esta mensagem por que é membro do Javasf
http://groups.google.com/group/javasf
 
Conheça também o Java Brazil: http://groups.google.com/group/thejavabrazil

Lessandro Notaroberto Pyrâmides

unread,
Jan 11, 2011, 1:12:15 PM1/11/11
to jav...@googlegroups.com

Então, boa tarde a todos...

Então, usei o mesmo esquema de implementação seu, porém estou tendo o seguinte problema.

Ao entrar no método loadUserByUsername() ele está entrando nesse método da classe AbstractUserDetailsAuthenticationProvider:

 

public Authentication authenticate(Authentication authentication) throws AuthenticationException {

 

E posteriormente nesse try caindo na exceção:

 

  try {

            preAuthenticationChecks.check(user);

            additionalAuthenticationChecks(user, (UsernamePasswordAuthenticationToken) authentication);

        } catch (AuthenticationException exception) {

            if (cacheWasUsed) {

                // There was a problem, so try again after checking

                // we're using latest data (i.e. not from the cache)

                cacheWasUsed = false;

                user = retrieveUser(username, (UsernamePasswordAuthenticationToken) authentication);

                preAuthenticationChecks.check(user);

                additionalAuthenticationChecks(user, (UsernamePasswordAuthenticationToken) authentication);

            } else {

                throw exception;

            }

 

Essa exceção está retornando "Bad credentials".

O mais interessante que isso ocorre apenas quando utilizo criptografia.

Alguém sabe o porque disso estar ocorrendo e como resolver?

Att,

Abs,

Lessandro

Rafael Ponte

unread,
Jan 11, 2011, 12:14:43 PM1/11/11
to jav...@googlegroups.com
A senha no seu banco de dados precisa estar criptografa como md5 se você configurou o a criptografia para tal, caso contrário é erro de autenticação :-)

2011/1/11 Lessandro Notaroberto Pyrâmides <lessandron...@gmail.com>



--
Rafael Ponte
http://www.rponte.com.br

Lessandro Notaroberto Pyrâmides

unread,
Jan 11, 2011, 1:20:03 PM1/11/11
to jav...@googlegroups.com

Mas ela está, senha 123:

 

INSERT INTO `tb_usuario` (`ID_USUARIO`, `DS_BAIRRO`, `DS_CIDADE`, `DS_ESTADO`, `DS_LOGIN`, `DS_RUA`, `DS_SENHA`, `NM_USUARIO`, `NU_CEP`, `NU_CPF`, `NU_LOCAL`, `NU_TEL_CONTATO`, `NU_TEL_FIXO`, `ID_PERFIL`) VALUES (1, 'MADRE TERESA', 'JUIZ DE FORA', 'MG', 'teste', 'XXXXXXXXXX', '202CB962AC59075B964B07152D234B70', 'USUARIO TESTE', NULL, '11111111111', 25, 3232111111, 3232111111, 1);

 

Abs,

Lessandro

Davinir F Campos Jr

unread,
Jan 11, 2011, 12:25:42 PM1/11/11
to jav...@googlegroups.com
O hash MD5 para 123 que calculei é 202cb962ac59075b964b07152d234b70

O conteúdo do seu campo é DIFERENTE.

[ ]s
Davinir

Lessandro Notaroberto Pyrâmides

unread,
Jan 11, 2011, 1:47:00 PM1/11/11
to jav...@googlegroups.com

Olá Davinir, obrigado pela ressalva, não havia me atentado para isso.

 

‘202CB962AC59075B964B07152D234B70’

‘202cb962ac59075b964b07152d234b70’

 

E como colocar em caixa alta no xml do spring-security antes de fazer a checagem?

Porque na minha base estou gravando tudo em caixa alta.

Antes como não utilizava o Security a minha função retornava esse cara em caixa alta.

Davinir F Campos Jr

unread,
Jan 11, 2011, 12:51:15 PM1/11/11
to jav...@googlegroups.com
Você está convertendo para caixa alta no campo senha ?!?! Isso não é uma boa prática.

Aconselho você a alterar o comportamento do seu campo senha.

[ ]s
Davinir

Lessandro Notaroberto Pyrâmides

unread,
Jan 11, 2011, 2:00:48 PM1/11/11
to jav...@googlegroups.com

Porque não seria uma boa prática?

Qual a diferença?

Rafael Ponte

unread,
Jan 11, 2011, 1:03:59 PM1/11/11
to jav...@googlegroups.com
Normalmente senhas são case-sensitive ;-)

Lessandro Notaroberto Pyrâmides

unread,
Jan 11, 2011, 7:26:49 PM1/11/11
to jav...@googlegroups.com

Ok, a implementação usando case-sensitive funcionou perfeitamente.

Mediante o usuário autenticado pelo spring, tem como recuperá-lo para que eu possa colocá-lo num painel

onde seja exibido: Seja bem vindo: Usuário xxxx

Luiz

unread,
Jan 12, 2011, 5:03:24 AM1/12/11
to jav...@googlegroups.com
vc pode pegar o usu�rio logado assim:

return
SecurityContextHolder.getContext().getAuthentication().getPrincipal();
--
Sent from my Personal Computer. Haters gonna hate

Lessandro Notaroberto Pyrâmides

unread,
Jan 12, 2011, 12:12:05 PM1/12/11
to jav...@googlegroups.com
Obrigado Luiz...
Apliquei aqui e funcionou muito bem...
Gde abraço,
Att,
Lessandro

-----Mensagem original-----
De: jav...@googlegroups.com [mailto:jav...@googlegroups.com] Em nome de Luiz
Enviada em: quarta-feira, 12 de janeiro de 2011 08:03


Para: jav...@googlegroups.com
Assunto: Re: [javasf] RES: Spring Security e MD5

vc pode pegar o usuário logado assim:

return
SecurityContextHolder.getContext().getAuthentication().getPrincipal();
--
Sent from my Personal Computer. Haters gonna hate

--

Reply all
Reply to author
Forward
0 new messages