4

我将重写我之前的问题。

Glassfish 在表单登录后重定向到最后访问的资源,我该如何关闭它?

我们的问题是我们在 FF 和 IE 中得到 415,因为如果我有 JSESSION cookie,Glassfish 将重定向到我尝试访问的最后一个资源,但不会从 (x-form-urlencoded) 切换内容类型。

伪示例(请求是浏览器的 XMLHttpRequest):

GET /secure/resouce1 (json) -> Response "you're not logged in."
GET /login.xhtml
POST /j_secure (x-form-urlencoded) -> New location /secure/resource1 (x-form-urlencoded)
GET /secure/resource1 (x-form-urlencoded) <- HTTP ERROR 415 content type not JSON.
4

3 回答 3

0

您可能需要编写一个过滤器来检查和捕捉这种情况。我喜欢这个教程(希望翻译成英文是可以理解的)。

于 2013-04-22T07:06:47.897 回答
0

在我看来,对于 RESTful 服务,最好使用基于 SSL 的 Basic 或 Digest 身份验证。其他选项包括将凭据作为有效负载的一部分,或者创建一个专用的登录服务,该服务接受凭据并返回一个令牌。基于表单的身份验证不太适合 RESTful 服务的原因有很多:它需要一个会话,它不使用现有的 HTTP 授权等等。
如果您需要使用 AJAX 调用 RESTful 服务,那么使用 cookie 进行身份验证可能是一个有效的解决方案。它们应该只影响用户是否可以拨打电话,而不影响服务器如何响应。

如果您想继续为您的应用程序使用基于表单的身份验证,我建议添加一个额外的 JAAS 身份验证提供程序来处理 RESTful 服务身份验证。你可以在这里阅读更多关于它的信息。

另一个应该比 JAAS 更容易的选择是使用Spring SecurityApache Shiro而不是基于容器的身份验证。 是使用 Spring Security 配置基于表单的身份验证的示例。这篇文章展示了一个如何使用 Spring Security保护 RESTful 服务的示例。

于 2013-04-23T11:28:12.143 回答
0

在您的登录页面

重置 JSESSIONID cookie 以防止重定向最后一页

// login_form.jsp

Cookie jsess = new Cookie("JSESSIONID", null);

jsess.setMaxAge(0);

jsess.setPath(pageContext.getServletContext().getContextPath());

response.addCookie(jsess);

于 2013-06-07T01:24:34.160 回答