gpt4 book ai didi

java - 如何为 RESTful 端点禁用基于 Spring 表单的登录?

转载 作者:IT老高 更新时间:2023-10-28 13:48:24 31 4
gpt4 key购买 nike

我根据 auto-config='true' 使用基本和基于表单的身份验证配置了 spring-security .

我想要 /api/** 下的端点不要使用基于表单的安全性。 /api/** 之外的其他端点应该使用基于表单的登录。我想要一个 401发送给这些端点的任何调用的响应,这些端点未在 /api/** 下提供凭据.

更新:感谢 Luke Taylor 在下面的评论,我想出了以下解决方案。

注意:此技术只能在 spring-security 3.1 中应用。

首先我要挑出/api/** .我们从不创建 session ,但如果可用则使用 session ,这由 create-session="never" 处理和使用<session-management/> .

<http pattern="/api/**" create-session="never" use-expressions="true">
<http-basic />
<session-management />
<intercept-url pattern="/api/**" access="hasRole('API_ACCESS')"/>
</http>

<http auto-config="true" use-expressions="true">
<intercept-url pattern="/" access="permitAll"/>
<intercept-url pattern="/**" access="isAuthenticated()"/>
</http>

最佳答案

在 Spring Security 3.1 中,您最好的选择是使用两个单独的 <http> 将应用程序的静止和非静止部分拆分为单独的过滤器链。元素。然后可以将 restful API 链配置为无状态并使用基本身份验证,而默认链可以使用普通的表单登录配置。

然后你会得到类似的东西:

<http pattern="/api/**" create-session="stateless">
<intercept-url pattern="/api/**" access="ROLE_API_USER" />
<http-basic />
</http>

<!-- No pattern attribute, so defaults to matching any request -->
<http>
<intercept-url pattern="/**" access="ROLE_USER" />
<form-login />
</http>

链定义必须从最具体的模式到最一般的模式排序,所以默认链排在最后。

关于java - 如何为 RESTful 端点禁用基于 Spring 表单的登录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11946903/

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