Angular 使用Spring引导从服务器端重定向到角度路由

Angular 使用Spring引导从服务器端重定向到角度路由,angular,spring-mvc,spring-boot,redirect,angular-routing,Angular,Spring Mvc,Spring Boot,Redirect,Angular Routing,我的应用程序由两个模块组成:一个角度5uimodule和一个弹簧启动座servermodule。我正在使用frontend maven插件构建uimodule,并将其资源文件复制到META-INF/resources文件夹中,以帮助Spring Boot发现它们。因此,这两个模块在同一个域中运行(http://localhost:8080) 现在,我很难实现此工作流的第3点: 1-用户在应用程序中注册(uimodule将用户数据发布到服务器) 2-收到数据后,servermodule通过验证链接

我的应用程序由两个模块组成:一个角度5
uimodule
和一个弹簧启动座
servermodule
。我正在使用
frontend maven插件
构建
uimodule
,并将其资源文件复制到
META-INF/resources
文件夹中,以帮助Spring Boot发现它们。因此,这两个模块在同一个域中运行(
http://localhost:8080

现在,我很难实现此工作流的第3点:

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

2-收到数据后,
servermodule
通过验证链接向用户发送验证邮件

3-当用户单击链接时,服务器将验证用户,并将其重定向到登录页面。

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

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

我试过这个,但没有成功:

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

  @GetMapping
  public String activate() {
    return "redirect:/login";
  }
}
同一路线(
http://localhost:8080/login
)在我单击已定义的登录按钮(在
index.html
中)时工作,但在来自服务器或手动写入时不工作(我收到404错误)


救命啊

服务器不知道该url,您必须将其重定向到您的主页,您需要一个映射url的控制器

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

其中index是您的angular页面

我使用相同的设置实现了相同的功能(即angular 8和Spring Boot作为gradle构建的单个应用程序),唯一的区别是我使用的是webflux模块。 经过一些研究,我发现我需要一个UrlBasedViewResolver的实现来处理转发或重定向。因此,我为要配置的ViewResolver包含了“org.springframework.boot:springbootstarter thymeleaf”模块,瞧,它成功了

所以和你一样,在发送邮件后,在用户点击链接验证邮件后,它被重定向到我想要的页面。下面是一个小代码段

    @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"));
@GetMapping(value=“/verify/{email}”)
公共Mono验证(@PathVariable字符串电子邮件)
{
log.info(“验证电子邮件{}”,电子邮件);
订阅订阅=新订阅();
订阅.setEmail(email);
subscribe.setVerified(false);
示例es=示例of(订阅);
返回此.subscribeRepository.findOne(es)
.doOnSuccess(子->
{
log.info(“设置已验证为真”);
sub.setVerified(真);
this.subscribeRepository.save(sub)
.subscribe();
})
.然后(Mono.just(“重定向:/verified”))
.onErrorResume(e->Mono.just(“重定向:/error”);

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

以及在将用户重定向到主页后我如何将其重定向到登录页面?在Angular中,所有应用程序都在一个页面中,由您决定使用哪种渲染器,您可以使用验证服务来检查您是否登录并提供登录页面