Отправить HttpServletRequest для фильтрации - PullRequest
0 голосов
/ 01 октября 2019

У меня есть набор приложений, которые используют 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 к моему приложению аутентификации, чтобы иметь возможность продолжить, есть ли что-нибудь подобное?

...