我已经有了表单登录和Basic auth并在a的帮助下并排工作DelegatingAuthenticationEntryPoint.
我要做的是让用户通过登录表单通过标准"A"进行身份验证,并让用户通过基本身份验证请求根据标准"B"进行身份验证.
某些应用程序的资源通过RESTful服务公开(可通过Basic auth访问).他们可以输入生成的键/值对,而不是让用户输入自己的凭据来进行REST服务调用,而是专门用于REST服务,以后可以由用户或应用程序管理员撤销.
我更愿意在两种身份验证方法之间共享尽可能多的特定于安全性的bean.我知道我需要单独的UserDetailsServices,因为表单登录查询我的users表,Basic auth将查询我的service_credentials表.
在Spring Security中实现此类配置的正确方法是什么?
Sha*_*eep 13
根据您的应用程序以及是否使用Spring Security 3.1,您最好将配置拆分为多个筛选器链,每个筛选器链都定义了一个单独的身份验证管理器:
<http pattern="/rest_api/**" create-session="stateless"
authentication-manager-ref="serviceCredsAuthMgr">
<http-basic />
</http>
<http authentication-manager-ref="mainAuthMgr">
<form-login />
</http>
<authentication-manager id="serviceCredsAuthMgr">
<authentication-provider user-service-ref="serviceCredsUserDetailsSvc" />
</authentication-manager>
<authentication-manager id="mainAuthMgr">
<!-- whatever -->
</authentication-manager>
Run Code Online (Sandbox Code Playgroud)
pattern您还可以使用该request-matcher-ref属性来指定RequestMatcher将用于将传入请求映射到特定过滤器链的实例,而不是该属性.这有一个非常简单的界面,但可以允许您根据URL路径以外的内容进行匹配,例如Accept标题.
| 归档时间: |
|
| 查看次数: |
7324 次 |
| 最近记录: |