【问题标题】:Redirect to an Angular route from server side using Spring Boot使用 Spring Boot 从服务器端重定向到 Angular 路由
【发布时间】:2018-09-18 07:17:18
【问题描述】:

我的应用由 2 个模块组成:Angular 5 uimodule 和 Spring Boot REST servermodule。我正在使用frontend-maven-plugin 构建uimodule 并将其资源文件复制到META-INF/resources 文件夹以帮助Spring Boot 发现它们。所以这 2 个模块在同一个域中运行 (http://localhost:8080)。

现在我正在努力实现这个工作流程的第 3 点:

1-A 用户在应用程序中注册(uimodule 将用户的数据发布到服务器)

2-收到数据后,servermodule向用户发送验证邮件,并附上验证链接。

3-当用户点击链接时,服务器验证用户并且应该将他重定向到登录页面。

/login 路由已存在于uimodule 中。现在我的问题是:

如何将用户从服务器端重定向到登录路由?

我试过了,但是不行:

@Controller
@RequestMapping( "/activate" )
public class ActivationController {

  @GetMapping
  public String activate() {
    return "redirect:/login";
  }
}

当我单击定义的登录按钮(index.html)时,相同的路由(http://localhost:8080/login)有效,但当它来自服务器或我手动编写时不起作用(我收到 404 错误)

救命!

【问题讨论】:

    标签: angular spring-mvc spring-boot redirect angular-routing


    【解决方案1】:

    服务器不知道那个 url,你必须把它重定向到你的 angular 主页,你需要一个映射 url 的控制器

    @RequestMapping(value = "/login")
    public String redirect() {
        return "index";
    }
    

    index 是你的角度页面

    【讨论】:

    • 在将用户重定向到主页后如何将用户重定向到登录页面?
    • 在角度所有应用程序都在一个页面中,由您决定使用什么渲染器,您可以使用身份验证服务来检查您是否登录并提供显示登录页面
    【解决方案2】:

    我使用相同的设置实现了相同的功能(即 Angular 8 和 Spring Boot 作为具有 gradle 构建的单个应用程序),唯一的区别是我使用的是 webflux 模块。 经过一番研究,我发现我需要实现 UrlBasedViewResolver 来处理转发或重定向。所以我包含了 'org.springframework.boot:spring-boot-starter-thymeleaf' 模块来配置 ViewResolver,瞧,它工作了。

    和你一样,在发送邮件并在用户单击链接以验证电子邮件后,它被重定向到我想要的页面。后面跟着一个小代码sn-p..

        @GetMapping(value = "/verify/{email}")
      public Mono<String> verify(@PathVariable String email)
      {
        log.info("Verifying email {}", email);
        Subscribe subscribe = new Subscribe();
        subscribe.setEmail(email);
        subscribe.setVerified(false);
        Example<Subscribe> es = Example.of(subscribe);
    
       return this.subscribeRepository.findOne(es)
                                           .doOnSuccess(sub ->
                                                        {
                                                          log.info("Setting verified to true");
                                                          sub.setVerified(true);
                                                          this.subscribeRepository.save(sub)
                                                                                  .subscribe();
                                                        })
                                           .then(Mono.just("redirect:/verified"))
                                           .onErrorResume(e -> Mono.just("redirect:/error"));
    

    我已经有验证和错误的 Angular 路由。希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-20
      • 2014-12-24
      • 2018-02-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多