gpt4 book ai didi

java - 使用 Spring Security 3.1 通过表单登录和 http-basic 安全性来保护相同的 RESTful 资源

转载 作者:搜寻专家 更新时间:2023-11-01 03:25:29 25 4
gpt4 key购买 nike

我有一个在 Tomcat 7 上运行的 Java Web 应用程序。我在后端使用 Spring 3.2 和 Spring Security 3.1,并按照/api/** 模式通过 RESTful URL 公开 API。

Web 应用程序的 UI 是使用 BackboneJS 构建的。我正在使用直接映射到 RESTful URLS 的 Backbone 模型。

UI 使用表单登录身份验证被锁定,因此如果用户当前未通过身份验证,他们将始终被重定向到登录屏幕。

我现在正尝试使用 http-basic 身份验证将相同的 RESTful URL 公开给另一个外部服务。不幸的是,当保护相同的 URL 模式时,Spring 似乎不允许我使用多个过滤器链。配置文件中首先定义的那个似乎优先。

我不愿意为相同的 RESTful 资源映射到不同的 URL 模式,但似乎我别无选择。

这是我的(目前损坏的)spring 安全配置的重要示例:

<!--  configure basic http authentication -->
<http pattern="/api/**" create-session="stateless">
<intercept-url pattern="/**" access="ROLE_USER"/>
<http-basic/>
</http>

<!-- configure form-login authentication -->
<http auto-config="true" use-expressions="true">
<intercept-url pattern="/ui/login" access="permitAll" />
<intercept-url pattern="/ui/logout" access="permitAll" />
<intercept-url pattern="/ui/loginfailed" access="permitAll" />
<intercept-url pattern="/**" access="ROLE_USER" />
<custom-filter ref="ajaxTimeoutRedirectFilter" after="EXCEPTION_TRANSLATION_FILTER" />
<form-login login-page="/ui/login" default-target-url="/" authentication-failure-url="/ui/loginfailed" />
<logout logout-success-url="/ui/logout" />
<session-management invalid-session-url="/ui/login"/>
</http>

我的问题是:是否可以使用 Spring Security 为相同的 URL 模式配置两种不同类型的安全性(http-basic 和 form-login)?是否有针对此类场景的最佳实践?

谢谢。

最佳答案

你为什么不合并这两个 <http>像这样的元素:

<http pattern="/api/**" use-expressions="true">
<intercept-url pattern="/ui/login" access="permitAll" />
<intercept-url pattern="/ui/logout" access="permitAll" />
<intercept-url pattern="/ui/loginfailed" access="permitAll" />
<intercept-url pattern="/**" access="ROLE_USER" />
<http-basic/>
<custom-filter ref="ajaxTimeoutRedirectFilter" after="EXCEPTION_TRANSLATION_FILTER" />
<form-login login-page="/ui/login" default-target-url="/" authentication-failure-url="/ui/loginfailed" />
<logout logout-success-url="/ui/logout" />
<session-management invalid-session-url="/ui/login"/>
</http>

这将同时设置一个 UsernamePasswordAuthenticationFilter和一个 BasicAuthenticationFilter在同一个过滤器链中,可以服务于 ui 客户端,也可以服务于外部服务。

关于java - 使用 Spring Security 3.1 通过表单登录和 http-basic 安全性来保护相同的 RESTful 资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15098856/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com