如何从@Controller重定向到流

时间:2018-12-05 17:26:15

标签: spring spring-mvc spring-boot spring-webflow

我需要重定向到@Controller的流,但是不确定如何执行此操作。我需要在某种情况下继续使用MVC,或者在另一种情况下进入我的流程。这是我的/auth方法的最后一行:

return new ModelAndView(isFlowProtected(getClientId(sessionDataPayloadJSON)) ?
    "redirect:/login-flow" :
    LoginConstants.LOGIN);

基本上,我有两个登录流程,一个通过常规Spring MVC,一个在Webflow下。这是我配置流程的方式:

@Bean
public FlowDefinitionRegistry flowRegistry() {
    return getFlowDefinitionRegistryBuilder().addFlowLocation("/webflow/login-flow.xml","login-flow"
            .setFlowBuilderServices(this.flowBuilderServices())
            .build();
}

@Bean
public FlowExecutor flowExecutor() {
    return getFlowExecutorBuilder(this.flowRegistry())
            .build();
}

@Bean
public FlowBuilderServices flowBuilderServices() {
    return getFlowBuilderServicesBuilder()
            .setViewFactoryCreator(this.mvcViewFactoryCreator()) // Important!
            .setValidator(this.localValidatorFactoryBean).build();
}

@Bean
public FlowHandlerMapping flowHandlerMapping() {
    FlowHandlerMapping handlerMapping = new FlowHandlerMapping();
    handlerMapping.setOrder(-1);
    handlerMapping.setFlowRegistry(this.flowRegistry());
    return handlerMapping;
}

@Bean
public FlowHandlerAdapter flowHandlerAdapter() {
    FlowHandlerAdapter handlerAdapter = new FlowHandlerAdapter();
    handlerAdapter.setFlowExecutor(this.flowExecutor());
    handlerAdapter.setSaveOutputToFlashScopeOnRedirect(true);
    return handlerAdapter;
}

@Bean
public ViewFactoryCreator mvcViewFactoryCreator() {
    MvcViewFactoryCreator factoryCreator = new MvcViewFactoryCreator();
    factoryCreator.setUseSpringBeanBinding(true);
    return factoryCreator;
}

假设我的流程正确,那么我在做什么错呢?需要时,如何从login-flow端点重定向到/auth?我目前收到以下错误:

java.io.FileNotFoundException: Could not open ServletContext resource [/webflow/login-flow.xml]

所以也许我的路径是错误的?流在resources/webflow内部,所以我认为是正确的,但也许不是吗?

1 个答案:

答案 0 :(得分:0)

您的WAR根目录中是否有/webflow/login-flow.xml文件?我认为就是该错误所表明的,即找不到该文件。我相信您的重定向工作正常,并且您的WebFlow配置希望在您指定的位置找到流配置文件,但是找不到该文件。

我还没有使用Java-based WebFlow configuration before,所以我可能会误解这一点,但是最好阅读一下,我认为即使在Java中进行其余配置时,您仍然可能需要Flow xml文件。

请参见Configure Spring Web Flow with Java configuration