Сломанная пружина безопасности добавляет аспект - PullRequest
0 голосов
/ 26 июня 2018

Я только что создал аспект для проверки входного параметра в моем методе входа в систему. У меня есть служба, реализующая интерфейс 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 из моего сервиса, все работает отлично. Что мне здесь не хватает?

1 Ответ

0 голосов
/ 26 июня 2018

Да, это было:

@Around(value="@annotation(LoginAnnotation)")
public Object loadByUserNameLoginValidation(ProceedingJoinPoint joinPoint) throws Throwable {
    return joinPoint.proceed();
}

результат должен быть возвращен из аспекта, иначе он будет нулевым.

...