我正在尝试建立一个简单的spring mvc / spring安全webapp,但我似乎无法找到实现这个目标的方法:
我如何实施最后阶段?
答案 0 :(得分:1)
我不确定我是否完全理解您的问题,但如果我理解正确,您可以扩展AbstractPreAuthenticatedProcessingFilter并覆盖getPreAuthenticatedPrincipal和getPreAuthenticatedCredentials以及对您的restful服务/控制器等的调用。覆盖AuthenticationUserDetailsService并且发布一个简单的服务,并添加您的安全上下文,如下所示:
<beans:bean id="preauthAuthProvider"
class="org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationProvider">
<beans:property name="preAuthenticatedUserDetailsService">
<beans:bean class="com.YourCompany.YourPreAuthenticatedGrantedAuthoritiesUserDetailsService"></beans:bean>
</beans:property>
<beans:property name="order" value="1"/>
</beans:bean>
<authentication-manager alias="authenticationManager" >
<authentication-provider ref="preauthAuthProvider" ></authentication-provider>
</authentication-manager>
答案 1 :(得分:0)
好的答案基本上是:
SecurityContextHolder.getContext().setAuthentication(...)
但是,为了能够在我上面描述的Spring MVC控制器控制身份验证过程的场景中使用它,还需要做一些其他的事情:
如果没有在此方案中未使用的身份验证管理器,Spring安全性将无法启动,因此我创建了一个空身份验证管理器:
@Service("nullAuthenticationProvider")
public class NullAuthenticationProvider implements AuthenticationProvider
{
@Override
public Authentication authenticate(Authentication authentication) throws AuthenticationException
{
return authentication;
}
@Override
public boolean supports(Class<?> authentication)
{
return true;
}
}
最后是spring context.xml:
<security:global-method-security secured-annotations="enabled" />
<security:http disable-url-rewriting="true">
<security:access-denied-handler error-page="/login" />
<security:form-login login-page="/login" />
</security:http>
<security:authentication-manager>
<security:authentication-provider ref='nullAuthenticationProvider'/>
</security:authentication-manager>