Я считаю, что рекомендуемый способ сделать это в Spring Security - использовать списки контроля доступа к домену, см. GrantedAuthoritySid @
http://static.springsource.org/spring-security/site/docs/3.1.x/reference/domain-acls.html
Однако олицетворение другого пользователя - это больше, чем просто «идентификация делегата», вы также должны учитывать последствия для ведения журнала:
- Вы хотите, чтобы ваша регистрация отображалась как Оригинальный пользователь или Олицетворенный пользователь (или оба?)
- Вы хотите, чтобы "олицетворение" показывало только то, что видит олицетворенный пользователь, или расширенный набор разрешений исходного пользователя и олицетворенного пользователя?
Еще одна возможность заключается в создании функции «войти в систему», которая существенно меняет основной идентификатор текущего сеанса или запускает новый сеанс с олицетворенным идентификатором.
Во всем вышеперечисленном вы можете непреднамеренно открыть проблему безопасности - поэтому я думаю, что именно поэтому функции в стиле олицетворения не так распространены. Скорее, разрабатывается тенденция к управлению доступом на основе ролей (RBAC) или управлению доступом на основе атрибутов (ABAC). Используя RBAC / ABAC, вы можете создать функцию стиля делегата, в которой вы создаете атрибуты / роли делегатов - и в особых случаях, когда вам нужно показать источник / цель делегирования (например, для журналов аудита), вы обрабатываете их как угловые случаи. .