两个APP跳转传值问题

时间:2021-11-21 04:01:03

最近工作上遇到个问题,新的项目要和老系统单点登录。

有点蒙,从来没做过,网上一搜都是SSO,还需要验证服务器。

仔细揣摩,其实需求很简单,没必要那么复杂,以下是我的需求和解决方案:

原系统AP1

新开发的系统AP2

两个应用的登录用户相同,需要用户首先在AP1实现登录,然后点击按钮跳转至AP2,保留用户的信息。

那么问题来清晰了,主要方面需要好好考虑

  1. 怎样实现两个应用共享相同的数据?
  2. 怎样实现从AP1到AP2的跳转?

对于第一个问题其实要看服务器是那种的。

如果是Tomcat,我们只需要配置Server.xml使两个应用的ServletContext对象可以互相访问,具体配置如下:

<Context docBase="AP1" path="/AP1" reloadable="true" CrossContext="true" source="org.eclipse.jst.jee.server:AP1"/>
<Context docBase="AP2" path="/AP2" reloadable="true" CrossContext="true" source="org.eclipse.jst.jee.server:AP2"/>

其中的CrossContext="true"就是告诉服务器其他应用可以访问我的ServletContext

如果是WebLogic服务器,那么我们就不需要做任何事了,需要别人的Context时直接取就可以了,获取Context代码如下:

ServletContext ctx = application.getContext("/AP2");

。。。。。。

然后第二个问题,页面跳转无非就是转发和重定向,可是App之间怎么搞。。

我发现在AP1下获得的AP2的ServletContext有妙用,上文中获得的对象ctx操作空间很大,以下为转发的方式跳转到AP2:

ctx.getRequestDispatcher("/index.jsp").forward(request,response);

这个时候我们成功跳转到idnex.jsp,,而这个jsp就是我在AP2中的页面了。而且保留了AP1的request,当然其中的session一样是没有变的。

到这里基本上没有什么问题了,这里有个问题,就是序列化,远程访问一个对象需要序列化,而这个session是否也需要序列化呢?记不太清楚当时怎么处理了,只记得本地使用Tomcat测试需要序列化,而Weblogic中有自动序列化的选项,不需要太费事转换对象。具体下次再专门查查对象序列化场景和应用吧。

新人发帖,如有纰漏欢迎大家斧正。