-3

我在我的 Web 应用程序中使用 Wicket 框架。如果我使用“å”或“ö”等非英语字符作为用户名(即:Björn),当我尝试登录时会出现以下异常:

原因:java.lang.IllegalArgumentException:cookie 值中的控制字符,请考虑在 org.apache.tomcat.util 的 org.apache.tomcat.util.http.ServerCookie.maybeQuote2(ServerCookie.java:340) 处对您的值进行 BASE64 编码。 http.ServerCookie.appendCookieValue(ServerCookie.java:253) 在 org.apache.catalina.connector.Response.addCookie(Response.java:958) 在 org.apache.catalina.connector.ResponseFacade.addCookie(ResponseFacade.java:341)在 org.apache.wicket.protocol.http.WebResponse.addCookie(WebResponse.java:86) 在 org.apache.wicket.markup.html.form.persistence.CookieValuePersister.save(CookieValuePersister.java:277) 在 org.apache .wicket.markup.html.form.persistence.CookieValuePersister.save(CookieValuePersister.java:97) at org.apache.wicket.markup.html.form.Form$12.onFormComponent(Form.java:第1291章)在 org.apache.wicket.markup.html.form.FormComponent.visitFormComponentsPostOrderHelper(FormComponent.java:408) 在 org.apache.wicket.markup.html.form.FormComponent.visitFormComponentsPostOrder(FormComponent.java:385) 在 org.apache .wicket.markup.html.form.Form.visitFormComponentsPostOrder(Form.java:1089) 在 org.apache.wicket.markup.html.form.Form.persistFormComponentData(Form.java:1280) 在 org.apache.wicket.markup .html.form.Form.process(Form.java:874) at org.apache.wicket.markup.html.form.Form.onFormSubmitted(Form.java:808) ... 省略了 27 个常用框架html.form.FormComponent$AbstractVisitor.formComponent(FormComponent.java:107) 在 org.apache.wicket.markup.html.form.FormComponent.visitFormComponentsPostOrderHelper(FormComponent.java:421) 在 org.apache.wicket.markup.html。 form.FormComponent.visitFormComponentsPostOrderHelper(FormComponent.java:408) 在 org.apache.wicket.markup.html.form.FormComponent.visitFormComponentsPostOrder(FormComponent.java:385) 在 org.apache.wicket.markup.html.form.Form。在 org.apache.wicket.markup.html.form.Form.persistFormComponentData(Form.java:1280) 在 org.apache.wicket.markup.html.form.Form.process(Form. java:874) at org.apache.wicket.markup.html.form.Form.onFormSubmitted(Form.java:808) ... 省略了 27 个常用框架html.form.FormComponent$AbstractVisitor.formComponent(FormComponent.java:107) 在 org.apache.wicket.markup.html.form.FormComponent.visitFormComponentsPostOrderHelper(FormComponent.java:421) 在 org.apache.wicket.markup.html。 form.FormComponent.visitFormComponentsPostOrderHelper(FormComponent.java:408) 在 org.apache.wicket.markup.html.form.FormComponent.visitFormComponentsPostOrder(FormComponent.java:385) 在 org.apache.wicket.markup.html.form.Form。在 org.apache.wicket.markup.html.form.Form.persistFormComponentData(Form.java:1280) 在 org.apache.wicket.markup.html.form.Form.process(Form. java:874) at org.apache.wicket.markup.html.form.Form.onFormSubmitted(Form.java:808) ... 省略了 27 个常用框架formComponent(FormComponent.java:107) at org.apache.wicket.markup.html.form.FormComponent.visitFormComponentsPostOrderHelper(FormComponent.java:421) at org.apache.wicket.markup.html.form.FormComponent.visitFormComponentsPostOrderHelper(FormComponent. java:408) 在 org.apache.wicket.markup.html.form.FormComponent.visitFormComponentsPostOrder(FormComponent.java:385) 在 org.apache.wicket.markup.html.form.Form.visitFormComponentsPostOrder(Form.java:1089)在 org.apache.wicket.markup.html.form.Form.persistFormComponentData(Form.java:1280) 在 org.apache.wicket.markup.html.form.Form.process(Form.java:874) 在 org.apache .wicket.markup.html.form.Form.onFormSubmitted(Form.java:808) ...省略了27个常用框架formComponent(FormComponent.java:107) at org.apache.wicket.markup.html.form.FormComponent.visitFormComponentsPostOrderHelper(FormComponent.java:421) at org.apache.wicket.markup.html.form.FormComponent.visitFormComponentsPostOrderHelper(FormComponent. java:408) 在 org.apache.wicket.markup.html.form.FormComponent.visitFormComponentsPostOrder(FormComponent.java:385) 在 org.apache.wicket.markup.html.form.Form.visitFormComponentsPostOrder(Form.java:1089)在 org.apache.wicket.markup.html.form.Form.persistFormComponentData(Form.java:1280) 在 org.apache.wicket.markup.html.form.Form.process(Form.java:874) 在 org.apache .wicket.markup.html.form.Form.onFormSubmitted(Form.java:808) ...省略了27个常用框架在 org.apache.wicket.markup.html.form.FormComponent.visitFormComponentsPostOrderHelper(FormComponent.java:408) 在 org.apache.wicket.markup.html.form.FormComponent.visitFormComponentsPostOrder(FormComponent. java:385) 在 org.apache.wicket.markup.html.form.Form.visitFormComponentsPostOrder(Form.java:1089) 在 org.apache.wicket.markup.html.form.Form.persistFormComponentData(Form.java:1280)在 org.apache.wicket.markup.html.form.Form.process(Form.java:874) 在 org.apache.wicket.markup.html.form.Form.onFormSubmitted(Form.java:808) ... 27常用框架省略在 org.apache.wicket.markup.html.form.FormComponent.visitFormComponentsPostOrderHelper(FormComponent.java:408) 在 org.apache.wicket.markup.html.form.FormComponent.visitFormComponentsPostOrder(FormComponent. java:385) 在 org.apache.wicket.markup.html.form.Form.visitFormComponentsPostOrder(Form.java:1089) 在 org.apache.wicket.markup.html.form.Form.persistFormComponentData(Form.java:1280)在 org.apache.wicket.markup.html.form.Form.process(Form.java:874) 在 org.apache.wicket.markup.html.form.Form.onFormSubmitted(Form.java:808) ... 27常用框架省略visitFormComponentsPostOrder(FormComponent.java:385) at org.apache.wicket.markup.html.form.Form.visitFormComponentsPostOrder(Form.java:1089) at org.apache.wicket.markup.html.form.Form.persistFormComponentData(Form. java:1280) 在 org.apache.wicket.markup.html.form.Form.process(Form.java:874) 在 org.apache.wicket.markup.html.form.Form.onFormSubmitted(Form.java:808) ...省略了27个常用框架visitFormComponentsPostOrder(FormComponent.java:385) at org.apache.wicket.markup.html.form.Form.visitFormComponentsPostOrder(Form.java:1089) at org.apache.wicket.markup.html.form.Form.persistFormComponentData(Form. java:1280) 在 org.apache.wicket.markup.html.form.Form.process(Form.java:874) 在 org.apache.wicket.markup.html.form.Form.onFormSubmitted(Form.java:808) ...省略了27个常用框架

我可以做些什么来允许用户输入非英文字符?

4

1 回答 1

0

如果您查看 的源代码CookieValuePersister,它根本不会加载或保存到 XML。相反,它是通过将 cookie 添加到要在用户浏览器中设置的 cookie 来“持久化”cookie。

这让我们知道真正的问题是什么。HTTP 状态管理机制RFC 规定 cookie 值必须作为可打印的 ASCII 字符发送。如果该值可能包含其他字符,则需要以 base64 之类的方式对其进行编码。

这也是异常消息所说的内容,尽管您可以使用任何可打印的基于 ASCII 的编码,如果您想...对规范施加的约束取模。

于 2012-06-18T16:06:30.323 回答