DaoAuthenticationProvider
을 사용하는 경우 JdbcDaoImpl
을 사용하고 있는데 JDBC 데이터베이스에서 사용자를로드한다고 가정합니다.
그렇다면 JdbcDaoImpl
이 수동으로 직접 빈을 작성하여 사용자를 찾는 데 사용하는 SQL 쿼리를 무시할 수 있습니다. 스프링 시큐리티가 사용하는 기본 쿼리는 다음과 같습니다
이
select username,password,enabled from users where lower(username) = lower(?)
적절한 봄 보안 XML 구성은 다음과 같습니다 :
<bean id="org.springframework.security.authenticationManager" class="org.springframework.security.authentication.ProviderManager">
<property name="providers">
<list>
<ref bean="daoAuthenticationProvider"/>
</list>
</property>
</bean>
<bean id="daoAuthenticationProvider" class="org.springframework.security.authentication.dao.DaoAuthenticationProvider">
<property name="userDetailsService" ref="caseInsensitiveUserDetailsService"/>
</bean>
<bean id="caseInsensitiveUserDetailsService" class="org.springframework.security.core.userdetails.jdbc.JdbcDaoImpl">
<property name="usersByUsernameQuery" value="select username, password, enabled from users where lower(username) = lower(?)" />
</bean>
이어 [http://static.springsource.org/spring-security/site/docs/3.1.x/reference/appendix-schema.html 같이, 열은 자명 ** IGNORECASE로 만들어 :'username varchar_ignorecase (50) not null primary key' – BenC
해당 페이지는 HSQLDB에 대한 SQL 문을 문서화합니다. 다른 데이터베이스는'varchar_ignorecase'를 지원할 수도 있고 지원하지 않을 수도 있습니다 ... 예를 들어, 지원하지 않는 PostgreSQL을 사용합니다. PostgreSQL에는 비슷한 기능을하는 추가 기능'citext' 모듈이 있지만 이전 버전에서는 기본적으로 설치되지 않으므로 쿼리에'lower()'를 추가하는 것이 더 쉬운 해결책입니다. – gutch