#java #spring #soap #spring-ws
#java #spring #soap #spring-ws
Вопрос:
В класс interceptor я хочу получить объект HttpServletRequest:
public class MyEndpointInterceptorAdapter extends EndpointInterceptorAdapter {
@Autowired
private HttpServletRequest httpServletRequest;
...
}
На самом деле я получаю прокси-объект HttpServletRequest.
Как я могу получить исходный объект HttpServletRequest из этого прокси-объекта spring?
Update1:
Для каждого запроса здесь приведена трассировка стека: java.lang.ClassCastException: com.sun.proxy.$Proxy622 не может быть приведен к weblogic.servlet.internal.ServletRequest запрашивается в weblogic.servlet.internal.ServletRequestImpl.getOriginalRequest(ServletRequestImpl.java:1654) в weblogic.servlet.security.Проверка подлинности сервлета.runAs(ServletAuthentication.java:726) в weblogic.servlet.security.Проверка подлинности сервлета.runAs(ServletAuthentication.java:710) в weblogic.servlet.security.Проверка подлинности ServletAuthentication.runAs (ServletAuthentication.java:681) в eu.cec.digit.ecas.client.authentication.Абстрактная веб-логика9servletauthentication.impersonate(абстрактная веб-логика9servletauthentication.java:170) в eu.europa.ec.comp.cmr.iop.soap.security.interceptor.EcasTicketAuthenticationInterceptor.authenticateAndImpersonate(EcasTicketAuthenticationInterceptor.java:107 ) в eu.europa.ec.comp.cmr.iop.soap.security.interceptor.Запрос EcasTicketAuthenticationInterceptor.handleRequest(запрос EcasTicketAuthenticationInterceptor.java:89) на org.springframework.ws.server.MessageDispatcher.dispatch(MessageDispatcher.java:227) на org.springframework.ws.server.MessageDispatcher.receive(MessageDispatcher.java:176) в org.springframework.ws.transport.support.WebServiceMessageReceiverObjectSupport.handleConnection(WebServiceMessageReceiverObjectSupport.java:89 ) в org.springframework.ws.transport.http.WebServiceMessageReceiverHandlerAdapter.handle(WebServiceMessageReceiverHandlerAdapter.java:61) в org.springframework.ws.transport.http.MessageDispatcherServlet.doService(MessageDispatcherServlet.java:293 ) в org.springframework.web.servlet.FrameworkServlet.ProcessRequest(FrameworkServlet.java:981) в org.springframework.web.servlet.FrameworkServlet.Отправьте сообщение (FrameworkServlet.java:884) в javax.servlet.http.HttpServlet.service (HttpServlet.java:707) в org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:858) в javax.servlet.http.HttpServlet.service (HttpServlet.java: 790) в weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:286) в weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:260) в weblogic .servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:137) в weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:350) в weblogic.servlet.internal.TailFilter.доФильтр (TailFilter.java:25) в weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78) в org.springframework.boot.actuate.web.trace.servlet.HttpTraceFilter.Сделайте внутренний фильтр (HttpTraceFilter.java:90) в org.springframework.web.filter.OncePerRequestFilter.доФильтр (OncePerRequestFilter.java:107) в weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78) в eu.europa.ec.comp.cmr.iop.soap.security.filter.ExceptionHandlerFilter.Сделайте внутренний фильтр (ExceptionHandlerFilter.java:23) в org.springframework.web.filter.OncePerRequestFilter.доФильтр (OncePerRequestFilter.java:107) в weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78) в org.springframework.web.filter.RequestContextFilter.Внутренний фильтр (RequestContextFilter.java:99) в org.springframework.web.filter.OncePerRequestFilter.доФильтр (OncePerRequestFilter.java:107) в weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78) в org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:109) в org.springframework.web.filter.OncePerRequestFilter.доФильтр (OncePerRequestFilter.java:107) в weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78) в org.springframework.web.filter.Скрытый HttpMethod-фильтр.Внутренний фильтр (hiddenhttpmethod Filter.java:93) в org.springframework.web.filter.OncePerRequestFilter.доФильтр (OncePerRequestFilter.java:107) в weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78) в org.springframework.boot.web.servlet.support.ErrorPageFilter.Дофильтруйте (ошибка PageFilter.java: 130) в org.springframework.boot.web.servlet.support.Ошибка PageFilter.access на 000 долларов (ошибка PageFilter.java:66) в org.springframework.boot.web.servlet.support.ErrorPageFilter$1.doFilterInternal(ErrorPageFilter.java:105 ) в org.springframework.web.filter.OncePerRequestFilter.Выполните doFilter(OncePerRequestFilter.java:107) в org.springframework.boot.web.servlet.support.ErrorPageFilter.доФильтр (ошибка PageFilter.java:123) в weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78) в org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.filterAndRecordMetrics(WebMvcMetricsFilter.java:117) в org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.Внутренний фильтр (WebMvcMetricsFilter.java:106) в org.springframework.web.filter.OncePerRequestFilter.доФильтр (OncePerRequestFilter.java:107) в weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78) в org.springframework.web.filter.CharacterEncodingFilter.Внутренний фильтр (CharacterEncodingFilter.java:200) в org.springframework.web.filter.OncePerRequestFilter.доФильтр (OncePerRequestFilter.java:107) в weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78) в weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3701) в weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3667) в weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:326) в weblogic.security.service.SecurityManager.runAsForUserCode(SecurityManager.java:197) в weblogic.servlet.provider.WlsSecurityProvider.runAsForUserCode(WlsSecurityProvider.java:203) в weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:71) в weblogic.servlet.internal.WebAppServletContext.doSecuredExecute(WebAppServletContext.java:2443) в weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2291) в weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2269) в weblogic.servlet.internal.ServletRequestImpl.runInternal(ServletRequestImpl.java:1703) в weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1663) в weblogic.servlet.provider.ContainerSupportProviderImpl$WlsRequestExecutor.run(ContainerSupportProviderImpl.java:272) при weblogic.invocation.ComponentInvocationContextManager._runAs(ComponentInvocationContextManager.java:352) в weblogic.invocation.ComponentInvocationContextManager.runAs(ComponentInvocationContextManager.java:337) на weblogic.work.LivePartitionUtility.doRunWorkUnderContext(LivePartitionUtility.java:57) в weblogic.work.PartitionUtility.runWorkUnderContext(PartitionUtility.java:41) в weblogic.work.SelfTuningWorkManagerImpl.runWorkUnderContext (SelfTuningWorkManagerImpl.java:644) на weblogic.work.ExecuteThread.execute(ExecuteThread.java:415) на weblogic.work.ExecuteThread.run(ExecuteThread.java:355)
Комментарии:
1. Зачем вам это нужно? Можете ли вы объяснить, что делает прокси?
2. Я знаю, что делает прокси-объект, но мне нужен исходный объект, чтобы передать его в библиотеку, которую я использую, а этой библиотеке не нужен прокси-объект
3. Что, точно , является случаем сбоя при передаче прокси?
4. Точно классическое исключение приведения: не удается преобразовать: java.lang. ClassCastException: com.sun.proxy.$Proxy622 не может быть приведен к weblogic.servlet.internal. ServletRequestImpl
5. Что-то гораздо более фундаментальное нарушается, если что-то пытается передать запрос определенному классу реализации. Пожалуйста, предоставьте более подробную информацию, в частности , включая трассировку стека.
Ответ №1:
Ответьте, из прокси-объекта, возвращаемого spring в @Autowired, у вас нет доступа к исходному объекту HttpServletRequest.
вы можете получить объект HttpServletRequest по другому пути из: RequestContextHolder
HttpServletRequest httpServletRequest =
((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();
Это дает вам исходный HttpServletRequest.