【问题标题】:Access not allowed for retrieving scripts不允许访问以检索脚本
【发布时间】:2020-01-21 08:57:29
【问题描述】:

我有一组在 Netflix Zuul 网关后面运行的微服务,它实现了基于 OAUTH2 的安全性,并在成功验证后向浏览器发出 JWT。

所有正常的 Spring MVC 页面都显示正常,但我有一个使用 Jersey 和 JSP 页面的应用程序,其中 Zuul 服务器阻止检索任何 CSS 和 JS 文件并出现 401 错误。

在浏览到 JSP 页面时如何包含当前用户的 JWT?

<!DOCTYPE html>

<%@ page contentType="text/html" language="java" pageEncoding="UTF-8" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

        <% 
    String selectionUri = (String) request.getAttribute("selectionUri");
    String removeUri = (String) request.getAttribute("removeUri");
%>

            <html>

            <head>
                <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
                <meta name="_csrf" content="${_csrf.token}" />
                <meta name="_csrf_header" content="${_csrf.headerName}" />
                <title>Smart Mine Treeview</title>
                <link rel="stylesheet" href="<c:url value='../../static/css/bootstrap-4.0.0-beta.min.css'/>" />
                <link rel="stylesheet" href="<c:url value='../../static/css/bootstrap-treeview.css'/>" />
                <link rel="stylesheet" href="<c:url value='../../static/css/mimacs.css'/>" />
                <link rel="stylesheet" href="<c:url value='../../static/css/all.css'/>">
                <script src="<c:url value='../../static/js/jquery-3.2.1.min.js'/>"></script>
                <script src="<c:url value='../../static/js/bootstrap-4.0.0-beta.min.js'/>"></script>
                <script src="<c:url value='../../static/js/bootstrap-treeview.js'/>"></script>
                </head>

            <body onLoad='loadTreeview("<%= selectionUri %>")' style="background-color: transparent">
                <div id="myFrame" style="display: none;">
                    <div class="my-frame">
                        <div class="my-hdr my-title">Location Hierarchy</div>
                        <div id="treeview" class="treeview my-treeview"></div>
                    </div>
                </div>
            </body>

            </html>

直接访问页面显示正常,但不能通过代理。 使用浏览器中的链接请求资源。例如http://localhost:30111/my-app/static/js/jquery-3.2.1.min.js,可以通过30111端口托管的网关成功检索到。

因此,我假设 JSP 页面没有提交当前用户的凭据以及资源请求。

关于从哪里开始寻找的任何帮助?

【问题讨论】:

    标签: java spring jsp jersey csrf


    【解决方案1】:

    从客户端应用程序中删除 Jersey 并替换为 Spring Boot 以使其正常工作。

    在进一步了解安全性之后,我意识到 Zuul 服务器使用 application.yml 配置了 Oauth2 授权,Spring Boot 样式。 这将创建一个 bean 以将来自浏览器的 JSESSIONID 与存储在网关的 JwtTokenStore 中的令牌进行匹配,并在传递请求之前验证那里的身份验证,而无需授权标头。 为了解决这个问题,网关有一个过滤器,可以将其存储中的授权标头添加到请求过滤器中,或者将网关配置为保留无状态会话,如图所示here

    【讨论】:

      猜你喜欢
      • 2014-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-23
      • 1970-01-01
      • 2022-11-26
      • 2013-10-27
      • 1970-01-01
      相关资源
      最近更新 更多