如何从@Controller重定向到流程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从@Controller重定向到流程相关的知识,希望对你有一定的参考价值。

我需要重定向到@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内部,所以我认为这是正确的,但也许不是吗?

答案

你的WAR根目录中有/webflow/login-flow.xml文件吗?我认为这是错误表明的,它无法找到该文件。我相信您的重定向工作正常,并且您的WebFlow配置期望在您指定的位置找到流配置文件,但它没有在那里找到它。

我没有使用过Java-based WebFlow configuration before,所以我可能会误解这一点,但最好我读到这个,我认为你可能仍然需要Flow xml文件,即使你在Java中完成其余的配置。

Configure Spring Web Flow with Java configuration

以上是关于如何从@Controller重定向到流程的主要内容,如果未能解决你的问题,请参考以下文章

如何从webapp重定向到Google云端硬盘应用

如何在GET URL上重定向页面

如何从 Spring Boot REST Controller 获取角度视图中的用户 ID

重定向时如何在 Safari 中保留 uri 片段?

springsecurity如何保存重定向地址

SpringMVC框架如何实现请求转发和重定向呢?