我正在尝试使用具有以下要求的spring-security为我的REST服务实现基本身份验证:
让我感到困惑的是,BasicAuthenticationFilter没有"授权" -Header,因此有效地允许访问没有该标头的所有请求。 我除了这样的请求以抛出异常而不是重定向到 authenticationEntryPoint 。
我的代码如下:
<bean id="filterChainProxy" class="org.springframework.security.web.FilterChainProxy">
<constructor-arg>
<list>
<security:filter-chain pattern="/rest/**" filters="basicAuthenticationFilter,exceptionTranslationFilter" />
</list>
</constructor-arg>
</bean>
<bean id="basicAuthenticationFilter" class="authentication.MyBasicAuthenticationFilter">
<property name="authenticationManager" ref="myAuthenticationManager" />
<property name="authenticationEntryPoint" ref="authenticationEntryPoint" />
</bean>
<bean id="authenticationEntryPoint" class="org.springframework.security.web.authentication.www.BasicAuthenticationEntryPoint">
<property name="realmName" value="myRealm" />
</bean>
我的假设是,我可能需要一个 filterSecurityInterceptor ,并且还需要一个 accessDecisionManager 。我不想使用这些,因为在我看来他们关心授权(与身份验证相反),我在申请的这一点上没有任何角色。
我只是想检查一个正确的用户名/密码组合 并做出相应的反应(401或403)。
我想我错过了一些非常基本的东西,所以任何提示或帮助都会非常感激。
答案 0 :(得分:2)
如果没有授权(从Spring Security的角度来看),则允许任何请求,因此不需要身份验证。所以是的,你需要一个FilterSecurityInterceptor
,即使它只根据用户是否经过身份验证做出决定。
在过滤器链的开头还需要SecurityContextPersistenceFilter
,因为即使您的应用程序是无状态的,也需要在每个请求结束时清除安全上下文。
您可能会发现this article非常有用,因为它更详细地讨论了普通bean配置。