JAVA-跨应用程序身份验证

JAVA-跨应用程序身份验证,java,javascript,tomcat,authentication,Java,Javascript,Tomcat,Authentication,我有不同的java web应用程序作为不同的模块在tomcat上运行,一个java web应用程序作为插件作为另一个不同的模块在同一个tomcat服务器上运行。我想在不同的应用程序中使用该插件(它本质上是一个弹出窗口,只是一个javascript文件,后端有几个URL映射的控制器)。我允许在Tomcat领域中跨域请求该插件,因此应用程序可以访问该弹出窗口并检索数据 Eg. in WebApp1, [http://localhost:8080/page1.html]: ajaxGet(http:



我有不同的java web应用程序作为不同的模块在tomcat上运行,一个java web应用程序作为插件作为另一个不同的模块在同一个tomcat服务器上运行。我想在不同的应用程序中使用该插件(它本质上是一个弹出窗口,只是一个javascript文件,后端有几个URL映射的控制器)。

我允许在Tomcat领域中跨域请求该插件,因此应用程序可以访问该弹出窗口并检索数据

Eg. in WebApp1, [http://localhost:8080/page1.html]:

ajaxGet(http://localhost:8081/getPopup, function(html){
    showPopup(html);
});
所有应用程序的体系结构都是一个简单的基于JSON的请求-响应驱动UI,前端是javascript,后端是URL控制器/servlet映射。

它可以很好地工作,但当然,它也可以用于域中应用程序内部的任何请求,即使这些请求没有经过身份验证。即使在登录页面,我也可以请求弹出窗口。

我该如何处理身份验证?考虑到插件不需要连接到数据库进行单独的身份验证,它的身份验证取决于调用应用程序是否已经过身份验证

提前感谢您的投入。:)

实际上您需要授权,这通常取决于身份验证。身份验证是告诉服务发出请求的过程,而授权是决定是否允许主体发出请求的过程

无论如何,您应该做的第一件事是向生成弹出内容的服务添加身份验证和授权(
/getPopup
)。一旦您获得了该服务,您实际上有很多选择:

  • 实现一些单点登录框架
  • 采用联合身份验证技术
  • 使用自定义身份验证方案转发来自呼叫应用程序的请求
显然,最简单的解决方案是在一个部署单元中将所有东西一起运送


作为补充说明,在本地主机上测试时请注意cookie会话名称:cookie绑定到主机名,而不是主机名+端口,因此一个服务在
localhost:X
上发布的JSESSIONID将被
localhost:Y

的JSESSIONID覆盖。您到底想做什么?嘿,Raffaele,非常感谢您的回复。我将实现一个自定义的身份验证方案,因为它不可能在所有不同的应用程序中添加弹出项目,它会花费更多的时间和精力。而且,单点登录是不可能的,因为有些应用程序通过LDAP身份验证,有些应用程序通过基于spring安全数据库的普通身份验证。谢谢在我尝试自己的想法时,如果您对身份验证方案有任何想法,我将不胜感激。:)如果弹出窗口不需要与主机应用程序交互,那么您可以公开一个小型应用程序,而不是静态HTML,它可以通过AJAX处理登录并通过
调用。它甚至可以导出函数
showPopup()
,以便在触发事件时可以从主机应用程序调用它。如果适用的话,这将是最简单的解决方案,因为它不需要用户映射/共享,甚至不使用跨源请求。在我的问题中,我只是使用了showpopup的一个示例,ajax请求实际上接收一个呈现的javascript函数作为响应,这正是您建议的。我计划有一个预握手授权令牌,它只在呼叫应用程序经过身份验证时设置。将请求中的此令牌传递给弹出窗口将用于完成身份验证。我会随时通知你的!非常感谢!很高兴它有帮助!无论如何,返回函数不是我建议的。我建议编写一个自包含的应用程序,比如popup.js,并使用
元素将其包含在宿主应用程序中。这样,您就不需要跨应用程序身份验证