2013-01-18 109 views
0

My MySql数据库区分大小写,在休眠状态下一切正常,数据库中的表名与我的类相同。但是在Spring Security中,默认身份验证不能正常工作,用小写字母而不是大写字母来构建表名第一个字母的SQL。有没有什么办法让Spring的安全性像Hibernate那样理解大写?或者我是否需要构建自定义身份验证才能将表名更改为大写字母?春季安全区分大小写

<!-- Session Factory Hibernate --> 
<bean id="sessionFactory" 
    class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 

    <property name="packagesToScan" value="br.com.empresa.domain" /> 
    <property name="dataSource"> 
     <ref local="mySQLdataSource" /> 
    </property> 
    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> 
      <prop key="hibernate.hbm2ddl.auto">create-drop</prop> 
      <!-- Novos geradores de ids recomendados pela documentação do hibernate --> 
      <prop key="hibernate.id.new_generator_mappings">false</prop> 
      <prop key="hibernate.show_sql">true</prop> 
     </props> 
    </property> 

</bean> 

<!-- Conexão com o Banco de Dados --> 
<bean id="mySQLdataSource" 
    class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 

    <property name="driverClassName" value="com.mysql.jdbc.Driver" /> 
    <property name="url" value="jdbc:mysql://localhost:3306/db" /> --> 
    <property name="username" value="root" /> 
    <property name="password" value="asd123456" /> 

</bean> 

<!-- It is responsible for validating the user's credentials --> 
<security:authentication-manager> 

    <!-- It is responsible for providing credential validation to the AuthenticationManager --> 
    <security:authentication-provider> 
     <security:password-encoder ref="passwordEncoder" /> 
     <security:jdbc-user-service 
      data-source-ref="mySQLdataSource" /> 
    </security:authentication-provider> 

</security:authentication-manager> 

<bean 
    class="org.springframework.security.crypto.password.StandardPasswordEncoder" 
    id="passwordEncoder" /> 
+0

spring安全访问数据库如何?你是如何配置的? – Kent

+0

@Kent添加了我的配置 – raonirenosto

回答

2

我想你使用JdbcDaoImpl(通过JDBC用户服务元素)。如果这是真的,那么你可以为默认查询提供你自己的SQL。

<jdbc-user-service 
    users-by-username-query="select username, password, enabled from Users where username = ?" 
    authorities-by-username-query="select username, authority from Authorities where username = ?" 
/> 
+1

如果您需要用户名不区分大小写,那么只需在'WHERE'子句中使用像'lower()'(或'upper()')这样的本地函数,如'where lower(用户名)=低(?)'。 – Lion

+0

@Maksym Demidas这就是我在互联网上找到的方式,这很好,但为什么Spring安全性不像休眠?我把@Table(name =“Users”)注释。无论如何,Spring应该与hibernate有更好的集成,那么注释就足够了。 – raonirenosto

+1

因为即使没有Hibernate,Spring Security也必须工作。所以** JdbcDaoImpl **使用普通的JDBC调用而不是Hibernate。如果你愿意,你可以提供你自己的实现UserDetailsS​​ervice并使用Hibernate的DAO。 Spring Security将能够使用它。 –