【问题标题】:Access to servlet protected by security-constraint from server-side code从服务器端代码访问受安全约束保护的 servlet
【发布时间】:2016-01-07 21:07:34
【问题描述】:

我正在谷歌应用引擎上运行一个 java 应用程序。我使用安全约束保护了我的管理 servlet:

<security-constraint>
    <web-resource-collection>
        <web-resource-name>tasks</web-resource-name>
        <url-pattern>/admin/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>admin</role-name>
    </auth-constraint>
</security-constraint>

现在我想从服务器端代码调用这些 servlet 之一。由于这种安全限制,这似乎是不可能的。是否存在阻止普通用户访问此资源但阻止访问来自服务器端代码的调用的角色?还是有其他方法可以解决我的问题?

【问题讨论】:

    标签: java security google-app-engine servlets security-constraint


    【解决方案1】:

    您可以将所需的方法移到安全 servlet 之外。然后您可以通过安全 servlet 或内部访问它。

    【讨论】:

    • 它是一个生成包含私有数据的 PDF 的 servlet,我想通过输入流读取它以将其附加到电子邮件中。所以我不想把它移出安全区域。
    • 您可以创建一个新的 PDFUtility 类,它将以字节、流的形式返回此 PDF 文件 - 任何适合您的方式。您可以从您的安全 servlet 调用此实用程序,也可以从其他地方的代码调用此实用程序。如果是同一个实例,则不需要通过 HTTP 请求。如果您尝试从不同的服务器(例如 GCE 实例)访问 GAE 实例,则可以创建两个调用相同实用程序的 servlet。一个 servlet 将受安全约束保护,另一个 servlet 受 OAuth2 或您使用的任何其他方法保护。
    • 你是对的。我实际上不需要 servlet 进行内部调用。我可以将其重构为内部方法。非常感谢您的提示!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-15
    相关资源
    最近更新 更多