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

我已经按照每个使用基本和基于表单的身份验证配置了spring-security auto-config='true'

我希望下面的端点/api/**不使用基于表单的安全性。外部的其他端点/api/**应使用基于表单的登录名。我希望401收到对未提供凭据的这些端点的任何呼叫的响应 /api/**

注意:此技术只能从spring-security 3.1开始使用。

首先我挑出来/api/**。我们永远不会创建会话,尽管会使用一个会话,这是由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>元素将应用程序的静态和非静态部分拆分为单独的过滤器链。然后,可以将静态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>

链定义必须从最特定的模式到最通用的顺序进行排序,因此默认链位于最后。

以上是 如何禁用RESTful端点的基于Spring表单的登录? 的全部内容, 来源链接: utcz.com/qa/398477.html

回到顶部