Estou com o seguinte problema, tenho uma aplicação desktop cliente/servidor e estou desenvolvendo alguns módulos web com primefaces, hibernate e spring security. Estou com problema na autenticação do Spring pois o meu banco de dados, na tabela de usuarios, a senha esta encripitada por um algoritimo proprio da aplicação desktop. Por essa razão a autenticação nao funciona, se eu entrar no banco e colocar a senha sem criptografar funciona na boa.
Minha pergunta é o seguinte, existe alguma maneira de eu configurar o spring para ao inves de ele usar password encoder md5 usar a minha classe de criptografia antes de fazer a autenticação ou alguem tem uma ideia para resolver este problema de uma outra maneira?
No “ref”, coloque um bean que implemente PasswordEncoder.
[]'s
R
Rafael_Mendon
Obrigado pela resposta mais ainda fiquei com dúvidas como eu crio bean??
Eu devo criar uma classe que implementa PasswordEncoder para fazer a minha criptografia?
A
Alexandre_Saudate
Rafael Mendon?:
Obrigado pela resposta mais ainda fiquei com dúvidas como eu crio bean??
Eu devo criar uma classe que implementa PasswordEncoder para fazer a minha criptografia?
Isso mesmo. Você pode até criar uma que encapsula a classe que você já tem (evitando, assim, refatorar ela), mas mesmo assim, você precisa de uma que implemente PasswordEncoder (para que o Spring Security saiba qual método invocar )
[]'s
R
Rafael_Mendon
Boa tarde… fiz o que vc sugeriu… mas estou com dificuldades em configurar o xml… fiz assim:
<authentication-manager><authentication-provider><password-encoderref="passwordEncoder"/><jdbc-user-servicedata-source-ref="dataSource"users-by-username-query="SELECT login, senha, situacao = 0 AS ativo FROM usuarios WHERE login=?"authorities-by-username-query="SELECT u.login, p.nome FROM usuarios u, perfisusuario p WHERE u.perfilusuario = p.perfilusuario AND u.login=?"/></authentication-provider></authentication-manager><beanid="passwordEncoder"class="br.com.erpnasajon.seguranca.Encoder"><propertyname="dataSource"ref="dataSource"/></bean>
Esta certo?
A classe Encoder que implementa a PasswordEncoder e nela faço meu algoritimo de encripitaçao mas ao rodar a aplicação dá o seguinte erro:
O authentication-manager pertence ao namespace do Spring Security, e o bean, ao namespace padrão.
R
Rafael_Mendon
Olá camarada… boa tarde…
Eu ainda sou um pouco leigo no assunto. O que voce disse na sua resposta é para eu copiar o bean abaixo do Application-Context.xml para o arquivo Web.xml ou é para fazer uma outra coisa que eu nao entendi?
Poste o seu arquivo de configuração do Spring. Essas configurações devem ficar nesse arquivo, não no web.xml.
R
Rafael_Mendon
Segue o arquivo para você dar uma olhada.
<?xml version="1.0" encoding="UTF-8"?><b:beansxmlns="http://www.springframework.org/schema/security"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:b="http://www.springframework.org/schema/beans"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.xsd"><httpauto-config="true"use-expressions="true"><intercept-urlpattern="/index.jsf"access="hasRole('ADMINISTRADORES')"/><form-loginlogin-page="/login.jsf"authentication-failure-url="/login.jsf?erro=true"/><logout/></http><authentication-manager><authentication-provider><jdbc-user-servicedata-source-ref="dataSource"users-by-username-query="SELECT login, senha, situacao = 0 AS ativo FROM usuarios WHERE login=?"authorities-by-username-query="SELECT u.login, p.nome FROM usuarios u, perfisusuario p WHERE u.perfilusuario = p.perfilusuario AND u.login=?"/></authentication-provider></authentication-manager><beanid="passwordEncoder"class="br.com.erpnasajon.seguranca.Encoder"><propertyname="dataSource"ref="dataSource"/></bean><b:beanid="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource"><b:propertyname="url"value="jdbc:postgresql://localhost:5432/ga"/><b:propertyname="driverClassName"value="org.postgresql.Driver"/><b:propertyname="username"value="postgres"/><b:propertyname="password"value="123456"/></b:bean></b:beans>
A
Alexandre_Saudate
Modifique para ficar assim:
<?xml version="1.0" encoding="UTF-8"?><b:beansxmlns="http://www.springframework.org/schema/security"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:b="http://www.springframework.org/schema/beans"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.xsd"><httpauto-config="true"use-expressions="true"><intercept-urlpattern="/index.jsf"access="hasRole('ADMINISTRADORES')"/><form-loginlogin-page="/login.jsf"authentication-failure-url="/login.jsf?erro=true"/><logout/></http><authentication-manager><authentication-provider><jdbc-user-servicedata-source-ref="dataSource"users-by-username-query="SELECT login, senha, situacao = 0 AS ativo FROM usuarios WHERE login=?"authorities-by-username-query="SELECT u.login, p.nome FROM usuarios u, perfisusuario p WHERE u.perfilusuario = p.perfilusuario AND u.login=?"/></authentication-provider></authentication-manager><b:beanid="passwordEncoder"class="br.com.erpnasajon.seguranca.Encoder"><b:propertyname="dataSource"ref="dataSource"/></b:bean><b:beanid="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource"><b:propertyname="url"value="jdbc:postgresql://localhost:5432/ga"/><b:propertyname="driverClassName"value="org.postgresql.Driver"/><b:propertyname="username"value="postgres"/><b:propertyname="password"value="123456"/></b:bean></b:beans>