使用SpringSocialConfigure时如何更改SocialAuthenticationFilter.FilterProcessURL?

使用SpringSocialConfigure时如何更改SocialAuthenticationFilter.FilterProcessURL?,spring,spring-security,spring-social,spring-social-facebook,Spring,Spring Security,Spring Social,Spring Social Facebook,Spring SocialSocialAuthenticationFilter处理url/auth。如何更改此url? 有一个方法SocialAuthenticationFilter.setFilterProcessURL(String FilterProcessURL)。如何访问SocialAuthenticationFilter对象以使用此方法?(我使用springsocialconfigure,它会自动将SocialAuthenticationFilter添加到链中。)不幸的是,使用原始s

Spring Social
SocialAuthenticationFilter
处理url
/auth
。如何更改此url?

有一个方法
SocialAuthenticationFilter.setFilterProcessURL(String FilterProcessURL)
。如何访问
SocialAuthenticationFilter
对象以使用此方法?(我使用
springsocialconfigure
,它会自动将
SocialAuthenticationFilter
添加到链中。)

不幸的是,使用原始
springsocialconfigure
无法设置已处理的url。查看代码,您可以“仅”流畅地配置诸如
postLoginUrl
postFailureUrl
signupUrl
ConnectionAddedDirectUrl
defaultFailureUrl
始终使用postFailureUrl

我想这是
springsocialconfigure
中的一个遗漏,您可能希望在上提交一个问题

目前,只需使用
SpringSocialConfigure
中的代码,并创建您自己的(小型)类。

根据用户“Hille”的建议,我现在通过以下操作创建了自己的
SpringSocialConfigure

a) 通过github()我复制了源代码并将其粘贴到我的自定义类中。

b) 然后我可以设置
过滤器进程URL
——下面是一个示例:

public class MySpringSocialConfigurer extends SecurityConfigurerAdapter<DefaultSecurityFilterChain, HttpSecurity> {

    @Override
    public void configure(HttpSecurity http) throws Exception {     

        ApplicationContext applicationContext = http.getSharedObject(ApplicationContext.class);
        UserIdSource userIdSource = getDependency(applicationContext, UserIdSource.class);
        UsersConnectionRepository usersConnectionRepository = getDependency(applicationContext, UsersConnectionRepository.class);
        SocialAuthenticationServiceLocator authServiceLocator = getDependency(applicationContext, SocialAuthenticationServiceLocator.class);
        SocialUserDetailsService socialUsersDetailsService = getDependency(applicationContext, SocialUserDetailsService.class);

        SocialAuthenticationFilter filter = new SocialAuthenticationFilter(
                http.getSharedObject(AuthenticationManager.class), 
                userIdSource, 
                usersConnectionRepository, 
                authServiceLocator);

        ...

        filter.setFilterProcessesUrl("/mysociallogin");

        ...

        http.authenticationProvider(
            new SocialAuthenticationProvider(usersConnectionRepository, socialUsersDetailsService))
            .addFilterBefore(postProcess(filter), AbstractPreAuthenticatedProcessingFilter.class);
    }

    private <T> T getDependency(ApplicationContext applicationContext, Class<T> dependencyType) {
        try {
            T dependency = applicationContext.getBean(dependencyType);
            return dependency;
        } catch (NoSuchBeanDefinitionException e) {
            throw new IllegalStateException("SpringSocialConfigurer depends on " + dependencyType.getName() +". No single bean of that type found in application context.", e);
        }
    }
}
公共类MySpringSocialConfigure扩展了SecurityConfigureAdapter{
@凌驾
public void configure(HttpSecurity http)引发异常{
ApplicationContext ApplicationContext=http.getSharedObject(ApplicationContext.class);
UserIdSource UserIdSource=getDependency(applicationContext,UserIdSource.class);
UsersConnectionRepository UsersConnectionRepository=getDependency(applicationContext,UsersConnectionRepository.class);
SocialAuthenticationServiceLocator authServiceLocator=getDependency(applicationContext,SocialAuthenticationServiceLocator.class);
SocialUserDetailsService socialUsersDetailsService=getDependency(applicationContext,SocialUserDetailsService.class);
SocialAuthenticationFilter=新的SocialAuthenticationFilter(
http.getSharedObject(AuthenticationManager.class),
userIdSource,
usersConnectionRepository,
authServiceLocator);
...
setFilterProcessesUrl(“/mysociallogin”);
...
http.authenticationProvider(
新的SocialAuthenticationProvider(用户连接存储库,socialUsersDetailsService))
.addFilterBefore(后处理(filter),AbstractPreAuthenticatedProcessingFilter.class);
}
私有T getDependency(ApplicationContext ApplicationContext,类dependencyType){
试一试{
T dependency=applicationContext.getBean(dependencyType);
返回依赖;
}捕获(无此项定义异常e){
抛出新的IllegalStateException(“SpringSocialConfigure依赖于”+dependencyType.getName()+”。在应用程序上下文中找不到该类型的单个bean。”,e);
}
}
}

谢谢-是的,通过创建自定义的
配置器
可以对其进行设置。我已经在另外一个答案中发布了我的结果解决方案。我还在github-上提交了一个问题。您可能希望将代码编写得更“有弹性”,并继续使用现有的fluent方法,即添加
if(filterProcessUrl!=null){filter.setfilterProcessUrl(filterProcessUrl);}
加上一个额外的setter,如
public MySpringSocialConfigurer filterProcessUrl(字符串filterProcessUrl)
,其代码类似于
userIdSource(userIdSource userIdSource)