Nếu tôi hiểu chính xác điều này, thì vấn đề là bạn muốn tra cứu tên người dùng do người dùng nhập vào trong hai cột DB khác nhau.
Chắc chắn, bạn có thể làm điều đó bằng cách tùy chỉnh UserDetailsService.
public class CustomJdbcDaoImpl extends JdbcDaoImpl {
@Override
protected List<GrantedAuthority> loadUserAuthorities(String username) {
return getJdbcTemplate().query(getAuthoritiesByUsernameQuery(), new String[] {username, username}, new RowMapper<GrantedAuthority>() {
public GrantedAuthority mapRow(ResultSet rs, int rowNum) throws SQLException {
.......
}
});
}
@Override
protected List<UserDetails> loadUsersByUsername(String username) {
return getJdbcTemplate().query(getUsersByUsernameQuery(), new String[] {username, username}, new RowMapper<UserDetails>() {
public UserDetails mapRow(ResultSet rs, int rowNum) throws SQLException {
.......
}
});
}
Cấu hình bean của bạn cho lớp này sẽ trông giống như thế này.
<beans:bean id="customUserDetailsService" class="com.xxx.CustomJdbcDaoImpl">
<beans:property name="dataSource" ref="dataSource"/>
<beans:property name="usersByUsernameQuery">
<beans:value> YOUR_QUERY_HERE</beans:value>
</beans:property>
<beans:property name="authoritiesByUsernameQuery">
<beans:value> YOUR_QUERY_HERE</beans:value>
</beans:property>
</beans:bean>
truy vấn của bạn sẽ trông tương tự như sau
select username, password, enabled from user where (username = ? or email = ?)
select u.username, a.authority from user u join authority a on u.userId = a.userId where (username = ? or email = ?)
Nguồn
2013-01-02 15:24:09
Tôi đã xem lớp học nhưng có một chút rắc rối khi tìm ra phương pháp nào tôi nên ghi đè lên. Bất kỳ con trỏ? – tumanov
Tôi nghĩ rằng tôi thấy nó bây giờ: loadUserByUsername (String username) – tumanov