从Spring重定向URL中删除项目名称前缀

时间:2019-03-18 19:34:07

标签: java spring nginx redirect java-ee

我使用nginx反向代理连接tomcat,nginx的配置是:

server {
  listen      80;
  listen [::]:80;
  server_name magnet.s-m.local;

  location / {
      proxy_pass http://tomcat:8080/magnet/;
      proxy_cookie_path /magnet /;
      proxy_redirect     off;
      proxy_set_header   Host $host;
      proxy_set_header   X-Real-IP $remote_addr;
      proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Host $server_name;
  }
}

每次都可以,但是当我要重定向用户spring时,请添加项目名称以重定向路径。

@RequestMapping(value = "/login",method = RequestMethod.POST)
public String loginCheck(HttpSession session, @RequestParam("username") String user, @RequestParam("password") String password){
    session.setAttribute("username",user);
    return "redirect:/home";
}

此代码重定向到http://magnet.s-m.local/magnet/home,但我想重定向http://magnet.s-m.local/home

如果我使用RedirectView会很好,但是使用redirect:/home会更好,因为如果登录失败,我可以决定重定向或加载jsp文件。

1 个答案:

答案 0 :(得分:1)

尝试从nginx配置中删除proxy_redirectproxy_set_header Host参数:

location / {
    proxy_pass http://tomcat:8080/magnet/;
    proxy_cookie_path /magnet /;
    proxy_set_header   X-Real-IP $remote_addr;
    proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Host $server_name;
}

您还可以更详细地指定proxy_redirect,但应将其激活。