使用Spring Boot进行SAML Http请求拦截

Fra*_*att 7 java spring-mvc spring-security saml-2.0 spring-boot

参考此SO问题使用Spring Security SAML向SAML请求添加请求参数

我想用我自己的默认HTTPRedirectDeflateBinding bean替换默认的HTTPRedirectDeflateBinding bean,它有一个自定义的HTTPRedirectDeflateEncoder来向我的SAML请求添加查询参数.

我正在尝试使用Spring Boot @Bean自动配置注释来实现这一点,并且是Java环境的新手,我似乎无法使其正常工作.我可以看到我的bean在启动时正在注册,但是出站的HTTP请求没有被它拦截,看起来原来的redirectBinding仍然是.

这是我添加到Configuration类中的bean:

@Bean(name="redirectBinding")
@Primary
public HTTPRedirectDeflateBinding HTTPRedirectDeflateBinding()
{
    return new HTTPRedirectDeflateBinding(null, new My_SAML_HttpRedirectDeflateEncoder());
}
Run Code Online (Sandbox Code Playgroud)

这是我的编码器,我正试图传递给重定向绑定

public class My_SAML_HttpRedirectDeflateEncoder extends HTTPRedirectDeflateEncoder{

@Override
protected String buildRedirectURL(SAMLMessageContext messagesContext, String endpointURL, String message)
        throws MessageEncodingException {
    URLBuilder urlBuilder = new URLBuilder(endpointURL);
    List<Pair<String, String>> queryParams = urlBuilder.getQueryParams();

    if (messagesContext.getOutboundSAMLMessage() instanceof RequestAbstractType) {
        queryParams.add(new Pair<String, String>("service", "myService"));
        queryParams.add(new Pair<String, String>("serviceType", "dev"));
    }

    return urlBuilder.buildURL();
}
Run Code Online (Sandbox Code Playgroud)

}

我还试图从这个SO响应spring boot中提出的解决方案添加http请求拦截器 类似的结果,我的HandlerInterceptor bean被注册但没有被截获.我觉得我错过了一个小细节.任何帮助,将不胜感激.

Bec*_*ari 0

您可以重新声明SAMLProcessorbean(由 所使用SAMLProcessingFilter)并在其绑定列表中添加您自己的绑定 bean。这是我在我的项目中使用的一个例子。

@Bean
public SAMLProcessorImpl processor() {
    Collection<SAMLBinding> bindings = new ArrayList<>();
    bindings.add(httpRedirectDeflateBinding());
    bindings.add(httpPostBinding());
    bindings.add(artifactBinding(parserPool(), velocityEngine()));
    bindings.add(httpSOAP11Binding());
    bindings.add(httpPAOS11Binding());

    return new SAMLProcessorImpl(bindings);
}
Run Code Online (Sandbox Code Playgroud)

希望对你有帮助。