2016-11-28 1 views
0

J'ai googlé UserCredentialsDataSourceAdapter, et ce que j'ai vu est les configurations basées sur XML pour l'utilisation de UserCredentialsDataSourceAdapter. Mon application utilise config java:Comment configurer UserCredentialsDataSourceAdapter en utilisant le code java?

public class SpringWebAppInitializer implements WebApplicationInitializer { 

    @Override 
    public void onStartup(ServletContext servletContext) throws ServletException { 

     AnnotationConfigWebApplicationContext appContext = new AnnotationConfigWebApplicationContext(); 
     appContext.register(ApplicationContextConfig.class); 

     ServletRegistration.Dynamic dispatcher = servletContext.addServlet("SpringDispatcher", new DispatcherServlet(appContext)); 
     dispatcher.setLoadOnStartup(1); 
     dispatcher.addMapping("/"); 

    } 

} 

@Configuration 
@ComponentScan("com.ambre.pta") 
@EnableTransactionManagement 
@PropertySources({ 
    @PropertySource("classpath:fr/global.properties"), 
    @PropertySource("classpath:fr/main.properties"), 
    @PropertySource("classpath:fr/admin.properties"), 
    @PropertySource("classpath:fr/referentiel.properties"), 
    @PropertySource("classpath:fr/departement.properties"), 
    @PropertySource("classpath:fr/exercice.properties"), 
    @PropertySource("classpath:fr/defi.properties") 
}) 
public class ApplicationContextConfig { 

    /** 
    * méthode permettant d'accéder les fichiers de ressources tels que les langues 
    * @return un gestionnaire de fichiers de ressources 
    */ 
    @Bean 
    public static PropertySourcesPlaceholderConfigurer properties() { 
     return new PropertySourcesPlaceholderConfigurer(); 
    } 

    /** 
    * méthode permettant de préciser l'emplacement et l'extension des vues jsp 
    * @return un gestionnaire de vue 
    */ 
    @Bean(name = "viewResolver") 
    public InternalResourceViewResolver getViewResolver() { 
     InternalResourceViewResolver viewResolver = new InternalResourceViewResolver(); 
     viewResolver.setPrefix("/WEB-INF/views/"); 
     viewResolver.setSuffix(".jsp"); 
     return viewResolver; 
    } 

    /** 
    * méthode permettant de spécifier la connexion à la base de données 
    * @return un gestionnaire de connexion à la base de données 
    */ 
    @Bean(name = "dataSource") 
    public DataSource getDataSource() { 
     BasicDataSource dataSource = new BasicDataSource(); 
     dataSource.setDriverClassName("oracle.jdbc.driver.OracleDriver"); 
     dataSource.setUrl("jdbc:oracle:thin:@localhost:1521:xe"); 
     dataSource.setUsername("pta"); 
     dataSource.setPassword("pta"); 

     return dataSource; 
    } 

    /** 
    * méthode permettant d'obtenir un gestionnaire de session hibernate 
    * @param dataSource instance de la connexion à la base de données 
    * @return un gestionnaire de session hibernate 
    */ 
    @Autowired 
    @Bean(name = "sessionFactory") 
    public SessionFactory getSessionFactory(DataSource dataSource) { 

     LocalSessionFactoryBuilder sessionBuilder = new LocalSessionFactoryBuilder(dataSource); 

     sessionBuilder.scanPackages("com.ambre.pta.model"); 

     return sessionBuilder.buildSessionFactory(); 

    } 

    /** 
    * méthode permettant de gérer automatiquement la gestion de transaction dans les requêtes sans plus avoir à commencer, valider ou annuler la transaction 
    * @param sessionFactory le gestionnaire de session hibernate 
    * @return un gestionnaire automatique de transaction 
    */ 
    @Autowired 
    @Bean(name = "transactionManager") 
    public HibernateTransactionManager getTransactionManager(SessionFactory sessionFactory) { 

     HibernateTransactionManager transactionManager = new HibernateTransactionManager(sessionFactory); 

     return transactionManager; 

    } 

    /** 
    * permet d'instancier un objet d'accès aux données qu'on peut utiliser dans les controleurs 
    * @param sessionFactory le gestionnaire de session hibernate 
    * @return un objet d'accès aux données 
    */ 
    @Autowired 
    @Bean(name = "utilisateurDao") 
    public UtilisateurDAO getUtilisateurDao(SessionFactory sessionFactory) { 
     return new UtilisateurDAOImpl(sessionFactory); 
    } 

} 

Alors, comment configurer UserCredentialsDataSourceAdapter dans mon cas?

Répondre

1

Juste set target data source avec ses informations d'identification

@Bean("ucDataSource") 
public UserCredentialsDataSourceAdapter getUCDataSource(){ 
    UserCredentialsDataSourceAdapter adapter = new UserCredentialsDataSourceAdapter(); 
    adapter.setTargetDataSource(getDataSource()); 
    adapter.setUsername("pta"); 
    adapter.setPassword("pta"); 
    return adapter; 
} 

et le fil en place un filtre définir les informations d'identification utilisateur

public class CredentialsFilter implements Filter{ 
    private UserCredentialsDataSourceAdapter dataSourceAdapter; 
    public UserCredentialsDataSourceAdapter getDataSourceAdapter() { 
     return dataSourceAdapter; 
    } 

    public void setDataSourceAdapter(UserCredentialsDataSourceAdapter dataSourceAdapter) { 
     this.dataSourceAdapter = dataSourceAdapter; 
    } 
    @Override 
    public void doFilter(ServletRequest request, ServletResponse response, 
      FilterChain chain) throws IOException, ServletException { 
     SecurityContext securityContext = SecurityContextHolder.getContext(); 
     Authentication authentication = securityContext.getAuthentication(); 

     if(authentication != null){ 
      Object principal = authentication.getPrincipal(); 
      Object credentials = authentication.getCredentials(); 
      dataSourceAdapter.setCredentialsForCurrentThread(
        principal.toString(), credentials.toString()); 
     } 
     try{ 
      chain.doFilter(request, response); 
     } finally{ 
      dataSourceAdapter.removeCredentialsFromCurrentThread(); 
     } 
    } 
} 

déclarer un bean de filtre

@Bean  
public FilterRegistrationBean credentialFilterRegistration() { 
    FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(); 
    filterRegistrationBean.setFilter(new CredentialsFilter()); 
    filterRegistrationBean.setOrder(1); 
    return filterRegistrationBean; 
}