2013-09-16 4 views
0

J'ai une application en JSF, Spring, Hibernate et Spring sécurité, l'interaction entre la couche d'hibernation et la base de données se passait bien, une fois la couche de sécurité de printemps les requêtes ne restituent rien .Le filtre de sécurité de printemps bloque toutes les requêtes hibernate

Une solution?

Je crée mon SessionFactory à partir du fichier de configuration de mise en veille prolongée

Les filtres à web.xml: ....................

!-- Spring Security --> 
    <filter> 
     <filter-name>springSecurityFilterChain</filter-name> 
     <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
    </filter> 

    <filter-mapping> 
     <filter-name>springSecurityFilterChain</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 

.................

La session de mise en veille prolongée classe de création d'usine:

............... ............

package Util; 

import org.hibernate.Session; 
import org.hibernate.SessionFactory; 
import org.hibernate.cfg.AnnotationConfiguration; 
import org.hibernate.cfg.Configuration; 
import org.hibernate.service.ServiceRegistry; 
import org.hibernate.service.ServiceRegistryBuilder; 


public class HibernateUtil { 

    private static SessionFactory sessionFactory; 

    static { 
     try { 

      Configuration configuration = new AnnotationConfiguration();; 
      configuration.configure(); 
      ServiceRegistry sr = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry(); 
      sessionFactory = configuration.buildSessionFactory(sr); 
     } catch (Throwable ex) { 
      // Log the exception. 
      System.err.println("Initial SessionFactory creation failed." + ex); 
      throw new ExceptionInInitializerError(ex); 
     } 
    } 

    public static SessionFactory getSessionFactory() { 
     return sessionFactory; 
    } 

} 

@Transactional 

public class stufImp implements stufDAO , Serializable { 


      private SessionFactory sf = HibernateUtil.getSessionFactory(); 
      Session session ; 

      public stufImp() { 

    } 


    @Override 
    public List<Stuf> getAllstufs() { 

       session=sf.getCurrentSession(); 
     session.beginTransaction(); 
     List<Stuf> stufs= session.createQuery("from Stuf").list(); 
     session.getTransaction().commit(); 
     System.out.println("getting All Stufs"); 

     return stufs; 
    } 

....................

+0

Voir la réponse. Pouvez-vous poster hibernate et la configuration basée sur le printemps aussi. –

Répondre

1

Pour commencer, d'abord supprimer la HibernateUtil que vous utilisez pour configurer mise en veille prolongée, la prochaine solution ton dao. Vous devez jamais stocker le Session dans une variable d'instance, du moins pas lorsque votre dao est un singleton. (Imaginez ce qui se passerait si deux demandes simultanées arrivaient, ce qui arrive à la session!).

Pour la configuration de l'hibernation SessionFactory, utilisez le LocalSessionFactoryBean du printemps. (Plus d'informations au the reference guide et javadoc).

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean" > 
</bean> 

Et vous avez également besoin du gestionnaire de transactions et activer les transactions basées sur des annotations.

<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 
    <property name="sessionFactory" ref="sessionFactory" /> 
</bean> 

<tx:annotation-driven /> <!-- By default references 'transactionManager' --> 

Modifiez votre dao (voir reference guide).

@Transactional 
public class stufImp implements stufDAO , Serializable { 

    @Autowired 
    private SessionFactory sf; 

    @Override 
    public List<Stuf> getAllstufs() { 
     return sf.getCurrentSession().createQuery("from Stuf").list(); 
    } 
} 

Liens

  1. Configuration SessionFactory au printemps reference guide
  2. DAOS mise en œuvre reference guide
Questions connexes