Я использую Spring Security 3. У меня есть собственный провайдер аутентификации.Почему мое loadUserByUsername не работает?
Вот то, что я до сих пор:
безопасности приложение-context.xml
<authentication-manager>
<authentication-provider user-service-ref="detailsService" />
</authentication-manager>
<beans:bean id="loginSuccessHandler" class="com.myapp.security.LoginSuccessHandler" />
<beans:bean id="loginFailureHandler" class="com.myapp.security.LoginFailureHandler" />
<beans:bean id="detailsService" class="com.myapp.security.UserDetailService" />
UserDetailService
public class UserDetailService implements UserDetailsService {
private DataSource dataSource;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
String hql = "from Users where username = :username";
List<Users> list = null;
try {
IO io = new IO("common_web");
IOQuery query = new IOQuery();
query.setStatement(hql);
query.setParameter(new IOParameter("username", username));
list = io.runQuery(query);
if (list.isEmpty()) {
return null;
}
} catch (Exception ex) {
ex.printStackTrace();
}
// THIS WORKS. I HAVE A VALID USER FROM DB
return (UserDetails) list.get(0);
}
}
Этот код всего лишь простой пример. В разделе «// ЭТО РАБОТЫ ...» У меня есть запись Users
из нашей базы данных. Но когда я возвращаю этот объект, я до сих пор не аутентифицирован.
Обратите внимание, что Users
является объектом таблицы Hibernate.
Что мне не хватает?
+1 Спасибо, что указали на не возвращающийся нуль. – cbmeeks