Minha aplicação esta utilizando as tags para configuração do banco no persistence.xml onde utilizo o hibernate para gerenciar as transações com o banco. e gostaria de configurar o spring para controlar a segurança do meu projeto, porém todos os exemplos que eu acho utiliza a configuração do banco nas do arquivo xml do spring security, minah duvida é se eu posso ter essas duas configurações… veja o meu codigo abaixo.
spring-security-config.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation=“
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-2.0.4.xsd”>
<form-login login-page="/login.jsp"
authentication-failure-url="/login.jsp?login_error=true" default-target-url="/index.jsp" />
</http>
<authentication-provider user-service-ref="customUserService">
<password-encoder hash="md5" />
</authentication-provider>
<beans:bean id="customUserService" class="br.com.jm.security.CustomUserDetailsService">
<beans:property name="dataSource" ref="dataSource" />
<beans:property name="usersByUsernameQuery" value="select login as username, senha as password, ativo as enabled from usuario where login = ?" />
<beans:property name="authoritiesByUsernameQuery" value="select u.login as username, p.descricao as authority from usuario u join usuario_perfil up on u.login = up.login join perfil p on up.id_perfil = p.id_perfil where u.login = ?" />
</beans:bean>
<beans:bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<beans:property name="driverClassName" value="com.mysql.jdbc.Driver" />
<beans:property name="url" value="jdbc:mysql://localhost/ecommerce" />
<beans:property name="username" value="edson" />
<beans:property name="password" value="integrator" />
</beans:bean>
<beans:bean class="br.com.jm.security.IncorrectPasswordEventListener">
<beans:property name="dataSource" ref="dataSource" />
</beans:bean>
<beans:bean class="org.springframework.security.event.authorization.LoggerListener" />
<beans:bean class="org.springframework.security.event.authentication.LoggerListener" />
</beans:beans>
[applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- Classe responsavel pela gestao das entidades -->
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceUnitName" value="ecommerce" />
</bean>
<!-- Identifica os beans anotados com @Service, @Repository, @Controller -->
<context:component-scan base-package="br.com.integrator.controller" />
<context:component-scan base-package="br.com.jm.security" />
<!-- Habilita a configuracao de beans via anotacoes
sem a necessidade de usar PersistenceAnnotationBeanPostProcessor,
AutowiredAnnotationBeanPostProcessor e etc
-->
<context:annotation-config />
<!-- Classe responsavel pela gestao das transacoes -->
<bean id="transactionManager"
class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory"
ref="entityManagerFactory" />
</bean>
<!-- Marcacao de transacoes atraves de anotacoes -->
<tx:annotation-driven />
<!-- Declaracao de Beans no Spring -->
<bean id="categoriaDao"
class="br.com.integrator.dao.imp.CategoriaDaoImp" />
CustomUserDetailsService
package br.com.jm.security;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.security.GrantedAuthority;
import org.springframework.security.userdetails.UserDetails;
import org.springframework.security.userdetails.jdbc.JdbcDaoImpl;
public class CustomUserDetailsService extends JdbcDaoImpl {
@Override
protected UserDetails createUserDetails(String username, UserDetails userFromUserQuery, GrantedAuthority[] combinedAuthorities) {
Usuario usuario = new Usuario();
usuario.setLogin(userFromUserQuery.getUsername());
usuario.setSenha(userFromUserQuery.getPassword());
usuario.setAtivo(userFromUserQuery.isEnabled());
usuario.setAuthorities(combinedAuthorities);
this.carregarInformacoesAdicionais(usuario);
return usuario;
}
private void carregarInformacoesAdicionais(final Usuario usuario) {
String sql = "select email, tentativas_login from Usuario where login = ?";
getJdbcTemplate().query(sql, new Object[]{usuario.getUsername()}, new RowMapper() {
public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
usuario.setEmail(rs.getString("email"));
usuario.setTentativasLogin(rs.getInt("tentativas_login"));
return null;
}
});
}
}