Erro injeção SessionFactory no UserDetailsServiceImpl (Vraptor 3.4.1, Spring+Security 3.1.2, hibernate 4.1)

255 views
Skip to first unread message

Fernando T. Xavier

unread,
Oct 17, 2012, 1:10:55 PM10/17/12
to caelum-...@googlegroups.com
Preazados,

Estou começando um teste de arquitetura de projeto, e consegui configurar com sucesso um projeto com Vraptor 3.4.1, Spring 3.1.2, hibernate 4.1.

porém tive problemas na injeção do sessionfactory no Dao na implementação do UserDetailsService do Spring Security 3.1.2.
O mesmo dao de Usuário injetado no controller do vraptor utilizando o @Autowired, que funcionou, na classe que implementa o UserDetailsService, não abre a sessao.

Eu sei que o assunto talvez não tenha tanto haver com o Vraptor em si, mas como muitos aqui devem usar essa combinação, talvez possam ajudar.

Já pesquisei em fóruns e listas de spring, mas não achei nada específico sobre isso.

Segue o codigo fonte com um exemplo:

http://www.ftxavier.eti.br/downloads/gradle.tar.gz

pra acessar a pagina de login é só chamar a url /login do projeto.

Stacktrace do erro:

org.hibernate.HibernateException: No Session found for current thread
    at org.springframework.orm.hibernate4.SpringSessionContext.currentSession(SpringSessionContext.java:97)
    at org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:941)
    at org.gradle.example.simple.dao.UsuarioDao.findByLogin(UsuarioDao.java:19)
    at org.gradle.example.simple.service.UserDetailsServiceImpl.loadUserByUsername(UserDetailsServiceImpl.java:30)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:319)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
    at $Proxy15.loadUserByUsername(Unknown Source)
    at org.springframework.security.authentication.dao.DaoAuthenticationProvider.retrieveUser(DaoAuthenticationProvider.java:81)
    at org.springframework.security.authentication.dao.AbstractUserDetailsAuthenticationProvider.authenticate(AbstractUserDetailsAuthenticationProvider.java:132)
    at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:156)
    at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:174)
    at org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter.attemptAuthentication(UsernamePasswordAuthenticationFilter.java:94)
    at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:195)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192)
    at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160)
    at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at com.springsource.insight.collection.tcserver.request.HttpRequestOperationCollectionValve.traceNextValve(HttpRequestOperationCollectionValve.java:112)
    at com.springsource.insight.collection.tcserver.request.HttpRequestOperationCollectionValve.invoke(HttpRequestOperationCollectionValve.java:94)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:579)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:662)

Desde já agradeço a ajuda e a atenção do pessoal.

[]'s
--
Fernando T. Xavier

Rafael Ponte

unread,
Oct 17, 2012, 2:38:54 PM10/17/12
to caelum-...@googlegroups.com
Olá Fernando,

Você está utilizando o padrão Open Session In View com o filter do Spring ou está utilizando a anotação @Transactional no seu método ou classe?


--
Fernando T. Xavier

--
You received this message because you are subscribed to the Google Groups "caelum-vraptor" group.
To post to this group, send email to caelum-...@googlegroups.com.
To unsubscribe from this group, send email to caelum-vrapto...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/caelum-vraptor?hl=en.



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

Lucas Cavalcanti

unread,
Oct 17, 2012, 8:57:06 PM10/17/12
to caelum-...@googlegroups.com
pra usar a sessionFactory integrada com os componentes do spring, vc precisa ter declarado a sessionFactory no spring (tipo com o AnnotationSessionFactoryBean)

e idealmente no applicationContext.xml no classpath

2012/10/17 Rafael Ponte <rpo...@gmail.com>

Fernando Xavier

unread,
Oct 18, 2012, 4:00:38 PM10/18/12
to caelum-...@googlegroups.com
Estou usando o @Transactional.
O que eu acho estranho é que nos controllers e testes unitários funciona tudo direitinho, só no UserDetailsService dá erro.

Fernando Xavier

unread,
Oct 18, 2012, 4:03:02 PM10/18/12
to caelum-...@googlegroups.com
sim eu declarei o meu sessionFactory no data-context.xml, segue ele em anexo.
data-context.xml
security-context.xml

Fernando Xavier

unread,
Oct 18, 2012, 4:05:24 PM10/18/12
to caelum-...@googlegroups.com
Na verdade eu testei os dois,

no meu web.xml esta assim:

    <filter>
        <filter-name>sessionFilter</filter-name>
        <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>
    </filter>

e tb tem o @Transactional nos daos, mas mesmo assim o UserDetailsService aparentemente não abre sessão do hibernate.

vlw

Rafael Ponte

unread,
Oct 18, 2012, 4:25:44 PM10/18/12
to caelum-...@googlegroups.com
O OpenSessionInViewFilter tem que vir antes do filtro do Spring Security.

2012/10/18 Fernando Xavier <ftxavi...@gmail.com>
To view this discussion on the web visit https://groups.google.com/d/msg/caelum-vraptor/-/eRVwaQU4t-YJ.

To post to this group, send email to caelum-...@googlegroups.com.
To unsubscribe from this group, send email to caelum-vrapto...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/caelum-vraptor?hl=en.
Reply all
Reply to author
Forward
0 new messages