如何禁用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

