Учитывая Java Servlet (работает на сервере Windows), который создает новый процесс через ProcessBuilder, каковы мои параметры для запуска этого нового процесса как пользователя, который вызвал исходный веб-запрос на сервлет?
Чтобы прояснить, я хочу, чтобы что-то вроде
ProcessBuilder pb = new ProcessBuilder("whoami");
Process p = pb.start();
// p.getOutputStream() should contain the name of the remote user,
// not the user running the app server
И реальная цель - выполнить некоторые проверки безопасности (например, посмотреть, может ли пользователь открывать файл или просматривать такую-то запись во внутренней корпоративной системе).
Очевидно, что пользователю нужно каким-то образом пройти аутентификацию либо сервером приложений, либо Java-кодом. В идеале мне бы хотелось, чтобы это было каким-то образом, что работает с одним знаком (т.е. без ввода пароля пользователем) и это прекрасно, если решение работает только с клиентов Windows, которые уже вошли в домен (хотя даже лучше, если это не ограничение). В настоящее время я использую Jetty в качестве сервера приложений, но при необходимости переключиться на что-то еще, безусловно, будет жизнеспособным вариантом.
(Если это помогает прояснить, я в основном хочу заменить CGI script, который в настоящее время использует функции олицетворения IIS для запуска в контексте пользователя, делающего запрос)
Проект Waffle получит вас (почти) там. Он имеет SSO и реализуется олицетворение.
Единственный вариант - это JNI или некоторая оболочка вокруг JNI, например JNA. Вам нужно будет вызвать API O/S для изменения ваших учетных данных, что также потребует, чтобы сервер приложений выполнялся как администратор, что само по себе является серьезным соображением безопасности.
Я не знаю конкретно о API Windows, но у большинства O/S есть возможность для достаточно мощного профиля (admin/root) принять личность любого профиля пользователя, не требуя пароля. В противном случае, как правило, единственным способом получить токен профиля пользователя является предоставление легитимных учетных данных для этого профиля.
Одна вещь, которую следует соблюдать, - это убедиться, что вы изменили учетные данные для потока, а не всего процесса.