1

JMS/ActiveMQ コンポーネントを介して Camel-Spring-remoting を使用して、2 つの spring-mvc アプリケーションを統合しようとしています。

App2 から App1 のリモート メソッドを呼び出すことができました。

App1 と App2 には共有 Web セッション (Spring-Session/Redis を使用) があり、currentUserId やそのプロパティなどのデータがあります。以下のようにセッションを呼び出します。

ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
HttpSession session = attributes.getRequest().getSession(false);
session.getSession().getAttribute("SYSTEM_USER_ACCOUNT");

リモーティング メソッドの呼び出しが JMS 経由で行われているため、App1 は以前に認証された HTTP セッションを識別できず、App1 で例外を下回っています。

org.apache.camel.RuntimeCamelException: java.lang.IllegalStateException: No thread-bound request found: Are you referring to request attributes outside of an actual web request, or processing a request outside of the originally receiving thread? If you are actually operating within a web request and still receive this message, your code is probably running outside of DispatcherServlet/DispatcherPortlet: In this case, use RequestContextListener or RequestContextFilter to expose the current request.
    at org.apache.camel.util.ObjectHelper.wrapRuntimeCamelException(ObjectHelper.java:1556)
    at org.apache.camel.component.bean.BeanInvocation.invoke(BeanInvocation.java:87)
    at org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:134)
    at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77)
    at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:448)
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191)
.
.
Caused by: java.lang.IllegalStateException: No thread-bound request found: Are you referring to request attributes outside of an actual web request, or processing a request outside of the originally receiving thread? If you are actually operating within a web request and still receive this message, your code is probably running outside of DispatcherServlet/DispatcherPortlet: In this case, use RequestContextListener or RequestContextFilter to expose the current request.
    at org.springframework.web.context.request.RequestContextHolder.currentRequestAttributes(RequestContextHolder.java:131)
    at com.keype.hawk.core.api.system.util.SessionUtils.getSession(SessionUtils.java:38)
    at com.keype.hawk.core.api.system.util.SessionUtils.getSystemUserAccount(SessionUtils.java:104)
    at com.keype.hawk.core.api.system.util.SessionUtils.getStaffId(SessionUtils.java:98)
    at com.keype.hawk.core.impl.party.service.PartyServiceImpl.preUpdate(PartyServiceImpl.java:208)
    at com.keype.hawk.core.impl.party.service.PartyServiceImpl.updateParty(PartyServiceImpl.java:525)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

ここでの練習は何ですか?JMS 呼び出し内からサーブレット コンテキストと現在のユーザーの http セッションにアクセスするにはどうすればよいですか?

4

0 に答える 0