2014-10-20 86 views
0

应用程序时,我的应用程序与Apache四郎保护。当我通过localhost:8080/MyApp访问我的应用程序时,我被成功重定向到localhost:8080/MyApp/login。 我使用凭据进行身份验证,并且一切都很好 - 我正在重定向到需要身份验证的主页。阿帕奇四郎会话无效访问通过nginx的proxy_pass

我已经配置nginx的代理与“很好”寻找这样的URL来访问应用程序:

server { 
    server_name www.example.com example.com; 
    listen 80; 
location/{ 
    proxy_pass http://localhost:8080/MyApp/; 
} 

}

当我通过www.example.com访问我的申请,我被再次成功地重定向到www.example.com/login,我填写的凭据,但随后的不是去我的主页,我再次被重定向,如果我未通过身份验证登录页面。

我试过几件事情,第一 - 我检查了我的要求是否达到负责认证和是否我确实验证的网址,我在我的控制器,两个映射:

  • /登录 - 这重定向到四郎登录页面
  • /login.do - 这实际上做认证

当任一被调用即时显示在控制台中,如果我通过认证:

System.out.println("is auth:" + SecurityUtils.getSubject().isAuthenticated()); 

当我去www.example.com这是发生了什么:

  1. 我没有通过认证,因此四郎重定向到登录网址,/登录被调用,我在控制台中看到,确实我“M未通过身份验证
  2. 我填写了用户名和passwd和我张贴的数据/login.do,在控制台中我看到,我顺利通过认证,login.do试图重定向到主页,而是我结束了在登录卵石,因而/登录被调用并在控制台中我看到我不再验证

我不知道它是否是Shiro的过失或错误可能nginx的配置,所以我已经改变了nginx的配置以下内容:

server { 
     server_name www.example.com example.com; 
     listen 80; 
    location /MyApp { 
     proxy_pass http://localhost:8080; 
    } 
} 

通过上述nginx的配置,并通过www.example访问应用程序.com/MyApp,一切都像一个魅力,我被重定向到登录页面,我成功验证,我被重定向到主页。

任何人能解释这种行为?那是nginx还是shiro的问题,还是我缺少其他东西?

//编辑:我想我知道出了什么问题,但我不知道如何解决它尚未:

我觉得四郎使用应用程序名称保存的cookies,www.example.com和www.example.com/MyApp将Cookie保存在相同的路径下 -/MyApp,因此www.example。COM无法找到正确的饼干 - 这同样是仅仅在这一点上怀疑

//编辑:我开始认为这是由于Sprinv MVC重定向(我认为这不是财会的servlet上下文)

回答

0

是的确实是Spring重定向问题。 而不是返回的:

return "redirect:/some/path"; 

我返回以下:

return new RedirectView("/some/path", true);