Я не знаю ни одного готового решения для обеспечения безопасности пружин, которое бы отвечало вашим требованиям, но я могу предложить вам способ его реализации.
Объявите URL для действия «просмотреть сайт как» с параметром запроса для получения имени пользователя, например: /myApp/viewTheSiteAs?user=marley
Напишите свой собственный фильтр, который будет выполнять следующие действия:
2.1 Подтвердите, что аутентифицированный пользователь является пользователем "admin"
2.2 Извлечение пользователя из действия («marley» :-))
2.3 Подтвердите, что он существует (используя UserDetailsService).
2.4 Создайте новый объект аутентификации с предоставленными полномочиями, который подходит для извлеченного пользователя, и замените текущий объект аутентификации своим собственным объектом: SecurityContextHolder.getContext().setAuthentication(myNewAuthObject)
Добавьте цепочку фильтров в конфигурационный файл Spring Spring для / ViewTheSiteAs, которая будет действовать как обычная цепочка фильтров (должна проверять подлинность «обычного» пользователя как обычного), и найдите свой пользовательский фильтр в конец цепи.
Выполнение следующих действий заставит Spring Security думать, что действие пользователя от viewTheSiteAs является аутентифицированным, и при этом проверять разрешения для этого пользователя.
p.s. - это не нарушение безопасности, поскольку оно понижает полномочия аутентифицированного пользователя, что означает «менее мощный» пользователь.
Удачи.