Nếu bạn đang sử dụng DaoAuthenticationProvider
thì tôi cho rằng bạn đang sử dụng JdbcDaoImpl
, nó sẽ tải người dùng từ cơ sở dữ liệu JDBC.
Nếu có, bạn có thể ghi đè truy vấn SQL JdbcDaoImpl
sử dụng để tra cứu người dùng bằng cách tự tạo bean. Truy vấn mặc định rằng mùa xuân Security sử dụng là:
select username,password,enabled from users where username = ?
Bạn có thể sử dụng chức năng SQL thấp hơn để bỏ qua trường hợp:
select username,password,enabled from users where lower(username) = lower(?)
các cấu hình XML Xuân An thích hợp là:
<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>
Trong [http://static.springsource.org/spring-security/site/docs/3.1.x/reference/appendix-schema.html], cột tên người dùng được tạo bằng ** ignorecase ** : 'username varchar_ignorecase (50) không null primary key' – BenC
Trang đó ghi lại các câu lệnh SQL cho HSQLDB. Cơ sở dữ liệu khác có thể hoặc không thể hỗ trợ 'varchar_ignorecase' ... ví dụ tôi sử dụng PostgreSQL không hỗ trợ nó. PostgreSQL không có một mô-đun 'citext' bổ sung làm một cái gì đó tương tự, nhưng nó không được cài đặt theo mặc định trong các phiên bản cũ để bổ sung' lower() 'vào truy vấn là một giải pháp dễ dàng hơn. – gutch