我需要通过 url 在用户名和/或密码中使用特殊字符使用 j_spring_security_check 登录
http://localhost:8080/appname/j_spring_security_check?j_username=username&j_password=üüü
不工作并且
http://localhost:8080/appname/j_spring_security_check?j_username=username&j_password=%c3%bc%c3%bc%c3%bc
(带有“üüü”urlencoded)
也不工作
有什么建议吗?如果您需要查看任何其他配置,请告诉我。
Thanks
遗憾的是,Java Servlet 标准对 Unicode 的支持很差。 ISO-8859-1 的默认值是无用的,并且仍然没有跨容器兼容的方法将其配置为其他内容。
过滤方法在matteosilv
的答案适用于请求机构。对于 URL 中的参数,您必须使用特定于容器的选项。例如在Tomcat http://wiki.apache.org/tomcat/FAQ/CharacterEncoding, set URIEncoding
on the <Connector>
in server.xml
; in 玻璃鱼 http://docs.oracle.com/cd/E18930_01/html/821-2417/beavn.html it's <parameter-encoding>
in glassfish-web.xml
.
(如果您必须以完全跨容器兼容的方式工作,您最终必须编写自己的实现getParameter()
,这确实是可悲的。错误的 Servlet。)
然而,无论如何,在 GET URL 参数中传递登录表单字段都是一个坏主意。
这首先是因为登录会导致状态更改发生,因此它不是“幂等”的。这使得 GET 成为一种不合适的方法,并会导致大量实际问题,例如在导航页面时可能会导致您登录,或者由于缓存而无法登录等等。
其次,URL 可以通过多种方式“泄露”,包括引用跟踪、日志记录、代理和浏览器历史记录保留。因此,您绝对不应该将任何敏感数据(例如密码)放入 URL 中,包括 GET 表单提交中。
我建议改为使用 POST 表单提交,以及CharacterEncodingFilter
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)