Я бы все еще использовал Spring Security для этого. Он может не иметь класса, который на 100% соответствует вашей схеме входа в систему, но для этого и существует наследование. Напиши свое. Вы можете легко избавиться от основанного на ROLE DecisionManager и настроить его в соответствии с вашей парадигмой.
Основываясь на ваших комментариях, вы проверили MethodInterceptor весной? Он создает прокси, который будет перехватывать вызовы любого метода в проксируемом классе и позволит вам запускать или запрещать метод на основе любого кода, который вы хотите. В Spring Security есть AbstractSecurityInterceptor, но я нахожу его очень сложным в использовании, и для большинства решений о доступе я считаю, что это излишне.
Поэтому я бы использовал Spring Security для аутентификации пользователя (и заполнения SecurityContext), а затем использовал перехватчики, чтобы перекрыть доступ к методам в ваших контроллерах, которые вы хотите защитить.