问题描述
现在遇到的问题是这样的:一个app需要服务一个服务端A提供的接口,而服务端对所有的url都有经过CAS过滤器过滤,也就是说要访问服务端A提供的url,必须先登陆cas,app是提供httpclient访问服务端A提供的接口,app的登陆账号是例外一套账号跟服务端A是不一样的,服务端A给该app提供一个通用的账号B来登陆cas,也就是说所有app请求过来都需要通过账号B来登陆cas,然后再访问服务端A的服务,现在有个思路是这样的,app请求服务时带上账号B的信息,然后在服务端A的cas过滤器前再定义一个新的过滤器C来拦截请求,然后在过滤器C里提供httpclient模拟登陆,登陆后那jsessionid返回给app,app再使用带有该jsessionid的请求来访问服务遇到的问题:这样带过滤器C模拟登陆后的jsessionid的请求,还是会被转到cas登陆页面,而如果通过浏览器登陆后再拿浏览器请求里的jsessionid设置给app请求确可以访问服务端A提供的服务。请问这是什么回事?浏览器登陆与httpclient模拟登陆对后台有什么不一样??请大侠赐教。。。。。。。。。。。。。。。急啊被这问题困扰了好几天了
解决方案
解决方案二:
sessionid过期了...因为应该是...过滤器C里提供httpclient模拟登陆,登陆后那jsessionid可能是保存在内存中的..sohttpclient结束以后就关闭了session...可以尝试保存httpclient不结束....
解决方案三:
可以了,jsessionid没过期,jsessionid保存在cas服务端这边关闭后服务端不会知道的,现在是这样解决的在过滤器c登录后返回cookies给app,app那边再把该cookies设置给app那边的httpclient,这样再访问时带着cookie过去就可以访问了,但不知道为什么浏览器登录只需要jsessionid就可以????代码在工作机拷贝不出来,截个图过滤器C登录成功或返回Cookiesapp这边接收到cookies后设置给httpclient以后app使用该httpclient随便访问服务都畅通无阻为什么浏览器登录只需要jsessionid就可以????还请高手指教啊