最近在弄个项目,需要远程调用接口,用了Spring HttpInvoke,遇到下面问题
: Could not access HTTP invoker remote service at [http://127.0.0.1:8080/NRMP/SyncRemoteService]; nested exception is : invalid stream header: 0D0A0D0A
at (:212)
at (:145)
at (:172)
at (:202)
at $(Unknown Source)
at (:31)
at .invoke0(Native Method)
at (:39)
at (:25)
at (:597)
at $(:44)
at (:15)
at (:41)
at (:20)
at (:28)
at (:31)
at .(:73)
at .(:46)
at (:180)
at $000(:41)
at $(:173)
at (:28)
at (:31)
at (:220)
at ..(:50)
at (:38)
at (:467)
at (:683)
at (:390)
at (:197)
Caused by: : invalid stream header: 0D0A0D0A
at (:782)
at .<init>(:279)
at .<init>(:47)
at .<init>(:81)
at (:271)
at (:239)
at (:95)
at (:136)
at (:192)
at (:174)
at (:142)
... 28 more
最后弄了两天终于找到原因了。
原来是spring mvc url认证拦截了导致错误的,就是下面这个配置
<!-- Shiro 过滤器 -->
<bean class="" depends-on="systemFilter">
<property name="securityManager" ref="securityManager" />
<property name="loginUrl" value="/login" />
<property name="successUrl" value="/" />
<property name="unauthorizedUrl" value="/403" />
<property name="filters">
<map>
<entry key="systemFilter" value-ref="systemFilter"/>
</map>
</property>
<property name="filterChainDefinitions">
<value>
/static/** = anon
/login = authc
/machine/** = anon
/machineSend/** = anon
/SyncRemoteService = anon
/** = authc,systemFilter
/sys/** = user
/res/** = user
</value>
</property>
</bean>
解决办法 ,将远程调用接口url排除在外就解决问题 加上这么一句 /SyncRemoteService = anon 就可以了