Bre*_*yan 10 java spring spring-security
我根据基本和基于表单的身份验证配置了spring-security auto-config='true'.
我希望端点/api/**不使用基于表单的安全性.外部的其他端点/api/**应使用基于表单的登录.我想401发送一个响应,发送给这些没有提供凭据的端点/api/**.
更新:感谢Luke Taylor在下面的评论,我提出了以下解决方案.
注意:此技术仅适用于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>
Run Code Online (Sandbox Code Playgroud)
Sha*_*eep 19
使用Spring Security 3.1,您最好的选择是使用两个单独的<http>元素将应用程序的restful和非restful部分拆分为单独的过滤器链.然后可以将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>
Run Code Online (Sandbox Code Playgroud)
链定义必须从最特定的模式到最一般的顺序排序,因此默认链是最后的.
| 归档时间: |
|
| 查看次数: |
8166 次 |
| 最近记录: |