Html vs JSP - 获取请求标头标记值

Hum*_*ing 6 html javascript java jsp angular

我正在研究Java应用程序.前端是Angular2.

如果我尝试打开我的应用程序主页( index.htmlweb.xml中配置为默认页面).访问URL应为 http:// localhost:8080/MyWebApp.

然后我进入了标准组织的登录页面进行身份验证.如果验证成功,将在请求标头中设置HTTP授权令牌,最后控件将显示我的应用程序主页.

如果我使用jsp,我可以获取请求标头,

String authHeader = request.getHeader("authorization");          
out.println("<h2>HTTP Authorization header:</h2>");

if (authHeader == null) {            
     out.print("No authorization header");      
} else {            
     out.print("<textarea readonly id='authHeader' rows=\"5\" cols=\"80\">" + authHeader + "</textarea>");
}
Run Code Online (Sandbox Code Playgroud)

但我们使用html作为前端,因为角度为2.

所以对于我的场景,我如何获得请求标头令牌.

如果不清楚,请不要犹豫,编辑我的问题.

Mar*_*rga 3

您无法从客户端 JavaScript 获取标头的值document唯一的例外是 User-Agent 和 Referrer 标头,因为浏览器在和对象中提供值navigator

您说您正在开发一个带有 Angular 2 前端的 Java 应用程序,并且其他一些应用程序提供了一个令牌(可能有助于指定这是否是标准的,例如 OAuth2)。我假设它是一个自定义令牌。我相信您还意味着您有一些服务器端组件,即 servlet。

您可以做的是使用 servlet(甚至 JSP)实现身份验证,然后重定向回 Angular 2 前端应用程序,将 URL 中的令牌作为查询参数传递。URL 在 Angular 2 中很容易阅读。然而,即使您使用JWT之类的东西,这也不是很安全。作为 URL 的替代方案,您可以使用Set-Cookie标头,然后从 Angular 读取 cookie。

几乎安全的是使用服务器端(servlet 甚至 JSP)对用户进行身份验证。然后创建一个一次性令牌,在重定向到 HTML 页面时将其作为查询参数在 URL 中传递。然后,再次在对服务器的调用中使用一次性令牌,以使用来自 Angular 2 的正确 REST 调用以及请求和响应来检索真正的身份验证令牌。

根据您拥有多少控制权以及身份验证应用程序使用哪种身份验证,您可能需要查看 OAuth2。它处理许多不同的身份验证场景。具体来说,OAuth2 隐式授权流程用于对来自仅客户端应用程序的用户进行身份验证。即使你不能使用它,它也会给你一些想法。