2014-03-31 29 views
0

我最近啓動了一個spring項目,它使用spring security和hibernate來實現對項目的訪問控制。 (應用程序的源代碼可在此處獲得:https://github.com/klebermo/webapp1)。Spring Security沒有從數據庫中讀取我的登錄憑證

我的問題是系統沒有從數據庫讀取登錄憑證。我可以確保問題與數據庫中的權限無關,因爲Hibernate可以創建和更新表(實際上,我使用空數據庫啓動應用程序,並且所有表都是由系統創建的)。

有人可以發現我的代碼有問題嗎? (下面列出了SecurityConfig類和HibernateConfig類,這些類不想在github存儲庫中搜索它們)。

SecurityConfig

@Configuration 
@ComponentScan(value="org.webapp") 
@EnableWebSecurity 
public class SecurityConfig extends WebSecurityConfigurerAdapter { 

    @Autowired 
    private DataSource restDataSource; 

    @Autowired 
    public void configure(AuthenticationManagerBuilder auth) throws Exception { 
     auth 
      .jdbcAuthentication() 
      .dataSource(restDataSource) 
      .usersByUsernameQuery(getUserQuery()) 
      .authoritiesByUsernameQuery(getAuthoritiesQuery()); 
    } 

    protected void configure(HttpSecurity http) throws Exception { 
     http 
      .csrf() 
       .disable() 
      .authorizeRequests() 
       .antMatchers("/spring/erro-login").permitAll() 
       .antMatchers("/css/**", "/fonts/**", "/image/**", "/js/**").permitAll() 
       .anyRequest().authenticated() 
       .and() 
      .formLogin() 
       .loginPage("/spring/index").permitAll() 
       .loginProcessingUrl("/spring/login").permitAll() 
       .usernameParameter("login") 
       .passwordParameter("senha") 
       .successHandler(new CustomAuthenticationSuccessHandler()) 
       .failureHandler(new CustomAuthenticationFailureHandler()) 
       .and() 
      .logout() 
       .logoutUrl("/spring/logout") 
       .logoutSuccessUrl("/spring/index").permitAll(); 
    } 

    private String getUserQuery() { 
     return "SELECT login as username, senha as password " 
       + "FROM usuario " 
       + "WHERE login = ?"; 
    } 

    private String getAuthoritiesQuery() { 
     return "SELECT DISTINCT usuario.login as username, autorizacao.descricao as authority " 
       + "FROM usuario, autorizacao_usuario, autorizacao " 
       + "WHERE usuario.id = autorizacao_usuario.fk_usuario " 
       + "AND autorizacao.id = autorizacao_usuario.fk_autorizacao " 
       + "AND usuario.login = ? "; 
    } 

} 

HibernateConfig

@Configuration 
@EnableTransactionManagement 
@PropertySource({ "classpath:persistence.properties" }) 
@ComponentScan({ "org.webapp.persistence" }) 
public class HibernateConfig { 

    @Autowired 
    private Environment env; 

    @Bean 
    public LocalSessionFactoryBean sessionFactory() { 
     LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean(); 
     sessionFactory.setDataSource(restDataSource()); 
     sessionFactory.setPackagesToScan(new String[] { "org.webapp.persistence.model" }); 
     sessionFactory.setHibernateProperties(hibernateProperties()); 

     return sessionFactory; 
    } 

    @Bean 
    public DataSource restDataSource() { 
     BasicDataSource dataSource = new BasicDataSource(); 
     dataSource.setDriverClassName(env.getProperty("jdbc.driverClassname")); 
     dataSource.setUrl(env.getProperty("jdbc.url")); 
     dataSource.setUsername(env.getProperty("jdbc.user")); 
     dataSource.setPassword(env.getProperty("jdbc.pass")); 

     return dataSource; 
    } 

    @Bean 
    @Autowired 
    public HibernateTransactionManager transactionManager(SessionFactory sessionFactory) { 
     HibernateTransactionManager txManager = new HibernateTransactionManager(); 
     txManager.setSessionFactory(sessionFactory); 

     return txManager; 
    } 

    @Bean 
    public PersistenceExceptionTranslationPostProcessor exceptionTranslation() { 
     return new PersistenceExceptionTranslationPostProcessor(); 
    } 

    Properties hibernateProperties() { 
     return new Properties() { 
     /** 
     * 
     */ 
     private static final long serialVersionUID = 1L; 

     { 
      setProperty("hibernate.hbm2ddl.auto", env.getProperty("hibernate.hbm2ddl.auto")); 
      setProperty("hibernate.dialect", env.getProperty("hibernate.dialect")); 
      setProperty("hibernate.globally_quoted_identifiers", "true"); 
     } 
     }; 
    } 
} 

回答

0

掉落@Autowired從第一configure方法(如可以在this看到引導它不應存在)

+0

好吧,我修復(順便說一下,愚蠢的錯誤我的)。但仍然發生同樣的問題。 –