2013-01-18 2 views
0

My MySql 데이터베이스는 대소 문자를 구별합니다. 최대 절전 모드에서는 모든 것이 정상적으로 작동하고 데이터베이스의 테이블 이름은 내 클래스와 동일합니다. 하지만 Spring Security에서는 기본 인증이 제대로 작동하지 않아 대문자 대신 소문자로 테이블 이름의 첫 번째 문자로 SQL을 작성합니다. 봄 보안이 최대 절전 모드처럼 대문자를 이해하도록 할 수있는 방법이 있습니까? 또는 테이블 이름을 대문자로 변경하기 위해서만 사용자 지정 인증을 작성해야합니까?봄 보안 대소 문자를 구분하십시오

<!-- 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

봄 보안 액세스 데이터베이스는 어떻습니까? 어떻게 구성 했습니까? – 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 username) = lower (?)'. – Lion

+0

@Maksym Demidas 인터넷에서 발견 한 것과 똑같은 방식이지만, 스프링 보안 (Spring Security)이 최대 절전 모드처럼 작동하지 않는 이유는 무엇입니까? @Table (name = "Users") 주석을 추가합니다. 어쨌든, Spring은 최대 절전 모드와 더 잘 통합되어야한다. 그러면 주석이 충분해질 것이다. – raonirenosto

+1

Spring Security는 Hibernate 없이도 작동해야하기 때문에. 그래서 ** JdbcDaoImpl **은 Hibernate 대신에 평범한 JDBC 호출을 사용한다. 원하는 경우, UserDetailsService를 구현하고 Hibernate를 사용하는 자신 만의 DAO를 제공 할 수 있습니다. 스프링 시큐리티는 이것을 사용할 수 있습니다. –

관련 문제