DaoAuthenticationProvider
を使用している場合は、JdbcDaoImpl
を使用していると想定します。この場合、JDBCデータベースからユーザーが読み込まれます。
もしそうなら、JdbcDaoImpl
が使用するSQLクエリを、手動でBeanを手動で作成して検索することができます。春のセキュリティが使用するデフォルトのクエリは次のとおりです。
select username,password,enabled from users where username = ?
あなたはケースを無視するSQL lower関数を使用することができます。
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>
、ユーザ名の欄には** IGNORECASEで作成されます** : 'username varchar_ignorecase(50)not null primary key' – BenC
このページには、HSQLDBのSQL文が記述されています。他のデータベースは 'varchar_ignorecase'をサポートしているかもしれないし、サポートしていないかもしれません...例えば、私はそれをサポートしていないPostgreSQLを使っています。 PostgreSQLには同様のことをするアドオン 'citext'モジュールがありますが、古いバージョンではデフォルトではインストールされないので、クエリに' lower() 'を追加する方が簡単です。 – gutch