У меня есть набор приложений, которые используют Kerberos
для аутентификации, нас попросили инкапсулировать весь этот код в одно приложение и использовать его в качестве моста
Проблема возникает, когда япытаясь отправить необходимую информацию из приложения, которое должно использовать приложение аутентификации.
Итак, у нас есть Filter
, который перехватывает входящие вызовы REST путем реализации метода doFilter
из интерфейса Filter
,который имеет 3 параметра: ServletRequest request, ServletResponse response, FilterChain chain
Это работает так: когда пользователь пытается использовать сервис из моего приложения, он будет перехвачен Filter
, и оттуда он перейдет кприложение аутентификации, но, конечно, когда мы пытаемся использовать его, мой Request
будет другим, а не исходным
Я пытался сделать следующее:
Gson gson = new Gson();
String jsonAsString = gson.toJson(this.properties);
try {
// String jsonAsString = objMapper.writeValueAsString(this.properties);
postRequest.setEntity(new StringEntity(jsonAsString, "UTF8"));
И с Gson
, и с ObjectMapper
, где this.properties
- это переменная из класса, в которой есть все необходимые элементы:
@JsonDeserialize(as = KerberosFilterTO.class)
public class KerberosFilterTO implements Serializable {
private PropertiesTO properties;
private ServletRequest req;
private ServletResponse res;
private FilterChain chain;
Но, конечно, это не будет работать, как ServletRequest и др. имеют циклическую зависимостьcies, переопределенные или несуществующие конструкторы и т. д., и все это приводит к StackOverFlow
ошибке
Я попытался сломать процесс аутентификации, но доходит до того, что мне понадобится оригиналзапрос в моем приложении для аутентификации:
KerberosServiceRequestToken authenticationRequest = new KerberosServiceRequestToken(kerberosTicket);
authenticationRequest.setDetails(this.authenticationDetailsSource.buildDetails(**request**));
В методе buildDetails
ему фактически нужны только две переменные из запроса, но они нужны в инкапсулированном методе из интерфейса в JDK, поэтому я могу 'Я даже не могу получить к нему доступ и, конечно, я не могу создать новый HttpServletRequest
, так как у него нет реализующего класса
Суть в том, что мне нужно иметь возможность отправлять, по крайней мере,HttpServletRequest
к моему приложению аутентификации, чтобы иметь возможность продолжить, есть ли что-нибудь подобное?