- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我想今天使用的常用术语是“单点登录”
。
请允许我解释一下我的情况。如果我使用了错误的术语或者我的解释不清楚,请原谅我,因为我不是一个特别好的开发人员,也不是一个架构师。
I have Site A (eg. www.siteA.com) and Site B (eg. www.siteB.com)
站点 A 是一个 Java 项目,而站点 B 是一个 Angular JS + Node JS 项目 (MyEAN Stack)。
将在站点 A 上提供转到站点 B 的链接。但是,您只有在成功登录站点 A 后才能查看站点 B 上的页面。
流程将是。
- Log in on Site A
- Click on link to Site B
- Site B loads
如果用户尝试访问 www.siteB.com,他们将不会被允许访问。您必须通过站点 A。因此请求必须至少来自站点 A。 SiteB 目前没有登录页面。
注意:- 这两个站点是不同的域。
我想知道我应该从哪里开始寻找我应该如何实现它。任何形式的想法都会很棒,因为我一直在阅读和阅读,但还没有找到一个好的起点。可能我看错地方了。
最佳答案
使用 JWT(Java 网络 token )在 SiteA 上登录后。当用户被重定向到 siteB 时,将向用户提供一个 token ,该 token 将传递到 SiteB。通常 token 在 header 中传递。
过程:
一旦用户登录到 SiteA。用户被提供了一个 token (JWT)。当用户单击指向 SiteB 的链接时,用户将被重定向到类似 www.siteA.com/redirect
的内容。 java web 服务器收到此请求并作为响应发送 header 中带有 token 和状态代码 301 的新链接。
注意:- 由于我不是 Java 开发人员并且我不知道您使用的是哪种 Java 服务器,因此我提供了 express 示例。我希望你从那里得到这个想法。
router.get('/redirect', function(req, res) {
var token = 'jsdh98yuhes87e6ywqy2'; // Something Your server have generated
res.header('Authorization', token);
res.redirect(301,'http://www.SiteB.com/autologin/');
});
现在在 NodeJS 服务器上使用它。您现在要做的就是验证 token 以验证用户是否从 Java 网站 (SiteA) 重定向。
NodeJS 服务器获取该请求并检查 header 。
app.get('/autologin', function(request, response) {
let token = request.headers['Authorization'];
var isValid = false;
// Your check logic here
if(isValid){// If Valid redirect to SiteB
response.cookie('id_token' ,request.headers['x-auth-token'], { maxAge: 9000,expires: 600});
response.redirect(301,'http://www.siteB.com');
}else{//If not Valid redirect back to SiteA
return response.redirect(301, "http://www.siteA.com");
}
});
如果 token 有效,用户可以访问网站 www.SiteB.com
,否则用户将被重定向回 www.SiteA.com
。
设置起来可能有点麻烦。有一种更简单的方法。
备选方案:
Java 服务器端登录逻辑是相同的,只是现在将 token 添加为查询参数。
类似于:
www.SiteB.com/autologin?Token=ldkasjodauh21i7ds8yuh
您可以直接将其作为 href
添加到您的重定向链接中。
将您的 AngularJS 应用程序设置为从 URL 获取 token 并向您的 nodejs 服务器或 Java 服务器调用 API 以验证 token 。
var token = $location.search().token;
var isValid = false;
// You check logic here
if(isValid){// If Valid redirect to SiteB
$location.url('http://www.siteB.com'); //$location.path('/') can be used as well
}else{//If not Valid redirect back to SiteA
$window.location.href ='http://www.siteA.com';
}
Java 服务器示例
package app.servlet;
import java.io.IOException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ResponseRedirectionServlet extends HttpServlet
{
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws IOException
{
String url = 'http://www.siteB.com';
response.setHeader("token", "kjsydis9d979as8dh87"); //some value that your server is generating
response.sendRedirect(url);
}
}
我仍然不知道您在 SiteA 上使用的服务器类型。如果您能提供有关您在站点 A 上使用的服务器类型的更多信息,我将能够更准确地帮助您。
关于java - 允许从站点 A 访问站点 B,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49622993/
最近我用 php 建立了一个网站,但他们的旧网站都是 HTML 格式的。所以现在我不知道使用 .htaccess 将所有这些旧链接重定向到新站点(可能将所有带有 HTML 的链接重定向到主域)的最佳方
我创建了一个新的 WordPress 网站,它是我旧网站的更名版本。它有一个新的域和一个新的设计。除此之外,其他一切都是相同的,包括内容和链接结构。现在我想完全重定向旧链接。与旧帖子一样,标签和类别
我想使用 WatiN测试我正在开发的网站的功能。理想情况下,我会在测试开始运行之前以编程方式部署网站 (asp.net MVC3),然后在每次测试之前刷新数据。这可能吗? 最佳答案 在此处阅读有关使用
我们的网站使用我们自己定制的 session 状态管理,与 ASP.NET session 状态分开。但是由于少数特殊页面使用 SQL Server Reporting Services,我们还需要启
不久前我看到一个网站,其中有 JavaScript/HTML/CSS 栏目,下面有实际代码的样子。有点像 jsFiddle,但它有用户示例和演示。有谁知道这个网站的名字吗?我到处都找不到它!谢谢! 最
我们的核心数据库出现问题,该数据库已由前一天的备份数据库恢复。 此后,网站工作正常,但我们在发布任何更改时遇到问题。一旦点击发布按钮,“发布正在初始化..”消息就会持续很长时间。截至“发布开始/结束”
我们的核心数据库出现问题,该数据库已由前一天的备份数据库恢复。 此后,网站工作正常,但我们在发布任何更改时遇到问题。一旦点击发布按钮,“发布正在初始化..”消息就会持续很长时间。截至“发布开始/结束”
Maven 不仅仅是一款项目构建和依赖管理工具,它还能够聚合项目信息,促进项目团队间地交流。POM 中可以包含各种项目信息,例如:项目描述、SCM 地址、许可证信息,开发者信息等。用户可以使用 Mav
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭上个月。 Improve this ques
您知道哪些网站正在使用 Silverlight?此信息将帮助我们决定何时采用 Silverlight 平台。 这些网站应该是面向公众的并且被认为是高流量的。 (每月至少 300,000 次点击)。 我
我尝试通过 VS2017 中的发布上下文菜单将我的 .net 核心站点部署到 Azure,偶尔(大约三分之一的部署),我收到以下错误。 Web deployment task failed. (Web
我为 20 个不同的国家/地区创建了一个包含 20 个站点(每个站点一个不同的域)的 Django 项目。这些站点共享所有内容:代码库、数据库、网址、模板等。 他们唯一不共享的是我在每个站点设置文件中
如何将商店页面添加到我使用 jekyll 和基础构建的网站? 任何自动化平台/方法都可以做到这一点。 谢谢。 最佳答案 您可以使用 snipcart .有一个blog post和一个 demo sit
我部署了一个服务结构集群,域为 foo.northcentralus.cloudapp.azure.com 它具有单一节点类型和单一公共(public) IP 地址/负载均衡器。 假设我部署了以下
我不是一个大的typ3 专家,也无法访问我正在使用的typ3 实例中的typoscript 选项(这是一个非常大的站点,我没有这样做的授权)。所以我希望这个问题适合 stackoverflow(如果没
我们正在对我们的 Drupal 站点进行性能调整。 我们正在使用 Siege 来衡量性能(作为 drupal 访问者)。 环境: Nginx + FastCGI + Memcache Siege 运行
我搜索了 SO、SU 和 SP.SE寻求解决方案,但找不到我需要的东西。我正在寻找一个解决方案,它可能是一个脚本或一些其他非编码方法/工具。 我正在尝试编写一个脚本(供其他人使用)或某种其他形式的自动
我有一个 Django 站点,它使用本地化中间件与 gettext 和 trans/blocktrans 模板标签相结合,根据用户代理字符串中的首选语言向访问者显示不同的页面(这似乎是在 Django
我是 Drupal 新手。是否可以设置所有内容并在服务器上部署 Drupal?我的意思是像放入内容、设置模块等...,然后将它们全部放到生产服务器上? 最佳答案 当然。 复制所有文件 编辑数据库凭证(
我想将以下行添加到我的 head.html仅在运行时 jekyll serve本地: 如果可能的话,我正在考虑使用一些简单的液体检查。 最佳答案 当你做 jekyll serve本地默认 {{
我是一名优秀的程序员,十分优秀!