【问题标题】:Securing webapp with UI & service Layer使用 UI 和服务层保护 webapp
【发布时间】:2026-02-18 04:10:02
【问题描述】:

我正在开发一个 Web 应用程序,它将包含两个不同的部署:一个包含带有 REST 端点的服务层(服务、数据库访问等),另一方面,一个 UI 层只有一个表示层基于通过使用服务层的 REST 端点检索到的数据。

我正在使用 Spring 开发这两个应用程序,因此自然的想法是使用 Spring Security 来保护应用程序。

但我将如何实现这一目标?我猜登录页面应该在 UI 层,但我如何通过这两个应用程序共享安全问题?有没有类似案例的参考书目?

请注意,这两个部署不一定位于同一个容器中。

【问题讨论】:

    标签: spring spring-security


    【解决方案1】:

    通常 REST 服务层在具有身份验证概念的单独服务器上运行,例如 Spring Security 开箱即用支持的基本或摘要身份验证。

    REST 服务的客户端将使用 REST 登录服务来验证自己并通过在请求旁边传递会话令牌来发出进一步的请求,或者更频繁地使用预先分配给每个请求的 REST API 密钥对每个请求进行签名客户。

    在这种情况下,REST 服务的客户端是前端服务器,它为登录页面和 Web 应用程序的任何其他页面提供服务,以及对页面 ajax 请求的回复,由于以下原因不能直接转到 REST 服务器同源政策。

    这种方式有两种独立的spring security设置:REST端的基本身份验证/摘要/自定义身份验证,前端服务器端的表单登录身份验证。

    用户向前端服务器标识自己,前端服务器向 REST 服务器标识自己。提供给页面的数据可能是多个 REST 调用的组合。

    【讨论】:

    • 感谢您的详尽回答。还有一个问题:如果我的身份验证是通过用户数据库进行的怎么办?我的数据访问机制在 REST 层,但身份验证发生在 UI 层。
    • UI 层可以对数据库表进行身份验证,REST 接口通常不会验证 UI 用户,而是通过其 API 密钥调用它的程序(前端服务器)
    • 不,它不能,正如我所说,我的 ui 层位于不同的环境中,因此它对数据存储库的唯一访问是通过 REST api