4

我正在尝试覆盖 Spring Social 的默认行为,以便在连接到提供商(Twitter、Facebook 等)后重定向到“connect/{providerId}Connected”。

所以我试图通过覆盖方法protected java.lang.String connectedView(java.lang.String providerId)来覆盖默认行为

所以我将 ConnectController 子类化并尝试覆盖:

@Controller
public class CustomConnectController extends ConnectController{

    @Inject
    public CustomConnectController(
            ConnectionFactoryLocator connectionFactoryLocator,
            ConnectionRepository connectionRepository) {
        super(connectionFactoryLocator, connectionRepository);
    }


    @Override
    protected String connectedView(String providerId){
        //Do some logic

        return "redirect:/foo/bar;
    }

}

请参阅控制器类的文档: http: //static.springsource.org/spring-social/docs/1.0.x/api/org/springframework/social/connect/web/ConnectController.html

但我收到以下错误:

原因:java.lang.IllegalStateException:发现不明确的映射。无法映射 'org.springframework.social.connect.web.ConnectController#0' bean 方法 public org.springframework.web.servlet.view.RedirectView org.springframework.social.connect.web.ConnectController.connect(java.lang.String ,org.springframework.web.context.request.NativeWebRequest) 到 {[/connect/{providerId}],methods=[POST],params=[],headers=[],consumes=[],produces=[], custom=[]}:已经有 'customConnectController' bean 方法 public org.springframework.web.servlet.view.RedirectView org.springframework.social.connect.web.ConnectController.connect(java.lang.String,org.springframework. web.context.request.NativeWebRequest) 映射。

任何人都可以请指导。我的要求如下: 1. 用户连接社交帐户(Twitter、Facebook 等)后 2. 做一些业务逻辑 3. 重定向到 /foo/bar 页面

请帮忙。

4

2 回答 2

7

好的,我自己找到了解决方案。为每个人发布答案,以便任何在愚蠢的事情上挣扎的人都可能受益:

实际上,我在我的配置中配置了 ConnectController,现在自定义控制器正在踩踏它,因此它说已经映射。从配置中删除配置可以解决问题。

在我的情况下,删除以下代码:

<bean class="org.springframework.social.connect.web.ConnectController">
        relies on by-type autowiring for the constructor-args
        <property name="applicationUrl" value="${application.url}" />
    </bean> 
于 2012-10-28T17:08:04.397 回答
0

好吧,您已经做对了所有事情,但忘记了添加

    @RequestMapping("/connect")

如果您正在使用 Spring boot 并且没有 spring-config.xml 文件,您可以使用下面的代码。

这段代码对我有用

@Controller
@RequestMapping("/connect")
public class ChangeDefaultFlowController extends ConnectController {

    public ChangeDefaultFlowController(ConnectionFactoryLocator connectionFactoryLocator,
            ConnectionRepository connectionRepository) {
        super(connectionFactoryLocator, connectionRepository);
    }

    @Override
    protected String connectedView(String providerId) {
        return "redirect:/"+providerId;
    }

}

此链接提供了有关将重定向流更改为页面或其他休息控制器的更多说明

于 2017-04-21T11:21:56.133 回答