Я только что создал аспект для проверки входного параметра в моем методе входа в систему. У меня есть служба, реализующая интерфейс UserDetailsService в Spring Security (Spring 4.2.1.RELEASE). На данный момент мой аспект очень прост, просто вызывается jointPoint.proceed (), но еще не проверяется входной параметр:
@Aspect
public class LoginAspect {
@Around(value="@annotation(LoginAnnotation)")
public void loadByUserNameLoginValidation(ProceedingJoinPoint joinPoint) throws Throwable {
joinPoint.proceed();
}
}
Мой сервис:
@LoginAnnotation
public class MyUserDetailService implements UserDetailsService {
//Retrieve User Details from database
@LoginAnnotation
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException, DataAccessException {
//Retrieve user details code
//.....
//.....
return userDetails;
}
}
При отладке кода я обнаружил, что загруженный пользователь является нулевым в методе Spring DaoAuthenticationProvider.retrieveUser:
if (loadedUser == null) {
throw new InternalAuthenticationServiceException(
"UserDetailsService returned null, which is an interface contract violation");
}
В тот момент, когда я удаляю свою собственную аннотацию @LoginAnnotation из моего сервиса, все работает отлично. Что мне здесь не хватает?