java - GAE 留言板 Java 教程。强制验证/签署 servlet 会导致重定向出现 405

标签 java google-app-engine servlets post

我已经完成了留言簿教程,并且一直在尝试对/sign servlet 强制进行身份验证。这是我在 web.xml 中放入的内容

<servlet>
    <servlet-name>sign</servlet-name>
    <servlet-class>com.google.appengine.demos.guestbook.SignGuestbookServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>sign</servlet-name>
    <url-pattern>/sign</url-pattern>
</servlet-mapping>
<security-constraint>
    <web-resource-collection>
        <web-resource-name>sign</web-resource-name>
        <url-pattern>/sign/*</url-pattern>
        <http-method>POST</http-method>
    </web-resource-collection>
    <auth-constraint>
        <role-name>*</role-name>
    </auth-constraint>
</security-constraint>

当尝试签署留言簿时,我被正确重定向到登录屏幕,但是一旦我单击“登录”,我就会收到以下错误

Error 405 HTTP method GET is not supported by this URL

看来重定向是 GET 而不是 POST。

任何帮助将不胜感激!

最佳答案

我想你问题的核心是,当用户被重定向到Google登录页面时,Google并没有真正使用POST将它们返回到你的应用程序,我认为它只是一个GET,所以总而言之,我怀疑Google登录是否会保留你原来的POST签名,并在用户通过身份验证后将其重放回你的应用程序。因此,您可以采取的一种方法是,如果用户未登录,则隐藏签名表单,然后显示一条消息,要求他们单击登录链接。例如,在 guestbook.jsp 上的第 80 行:

<%
if (user != null) {
%>
  <form action="/sign" method="post">
    <div><textarea name="content" rows="3" cols="60"></textarea></div>
    <div><input type="submit" value="Post Greeting"/></div>
    <input type="hidden" name="guestbookName" value="${fn:escapeXml(guestbookName)}"/>
  </form>
<%
} else {
%>
    <span>Please login first to be able to sign the guestbook (click the login link above)</span>
<%
}
%>

顺便说一下,我还没有测试过这个。

我过去必须使用的其他更复杂的选项是在 servlet 前面使用过滤器,记住用户在 session 中的原始请求,制定登录 URL,将用户重定向到它,一旦用户回来处理他们的原始请求,但这很复杂,所以在你的情况下,你最好明确要求用户首先进行身份验证

关于java - GAE 留言板 Java 教程。强制验证/签署 servlet 会导致重定向出现 405,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26246364/

相关文章:

javascript - 我需要帮助为 JDK 9.0.1 创建路径并让 cmd 运行名为 javac HelloApp.java 的命令

java - JavaFX究竟如何启动

node.js - 谷歌云平台 : Running several hours scraping script

JSF 2 - ResponseWriter.flush() 的意义

java 9999-12-31 isodate 插入 mongodb 结果中作为插入的非 iso 日期

google-app-engine - 如何从 Google App Engine 向随机的非应用管理员发件人发送电子邮件?

java - Google App Engine 在浏览器中打开 excel 文件而不是下载 - Vaadin

java - Servlet 请求阻塞

java - 将字符集添加到响应 header

java - 如何迭代 Google 表格中的所有行