2012-09-05 34 views
1

我的web应用程序使用预认证方法。在请求到达我的应用程序时,userPrincipal被正确设置。 我知道它没有使用Java EE容器安全性,它使用的是Apache Web服务器上配置的某些模块。Spring Security:不确定预认证方法

因此,我不确定使用哪种预认证方法。理想情况下,我需要与RequestHeaderAuthenticationFilter类似的东西,只不过它只是从请求中读取userPrincipal而不是头。

是否有开箱即用的机制来实现这一目标?

回答

1

就在延伸,然后注册AbstractPreAuthenticatedProcessingFilter,一切都在documentation

public class RequestPreAuthenticatedProcessingFilter 
    extends AbstractPreAuthenticatedProcessingFilter { 

    private static final String USER_PRINCIPAL_KEY = ""; 

    @Override 
    protected Object getPreAuthenticatedPrincipal(final HttpServletRequest request) { 
    return request.getAttribute(USER_PRINCIPAL_KEY); 
    } 

    @Override 
    protected Object getPreAuthenticatedCredentials(final HttpServletRequest request) { 
    return "N/A"; // or whatever you need 
    } 
} 

和安全context.xml中:

<security:http> 
    <!-- Additional http configuration omitted --> 
    <security:custom-filter position="PRE_AUTH_FILTER" ref="preAuthFilter" /> 
</security:http> 

<bean id="preAuthFilter" 
    class="com.example.RequestPreAuthenticatedProcessingFilter"> 
    <property name="authenticationManager" ref="authenticationManager"> 
</bean>