在我们的Web服务中,我们通过JavaScript设置了一个cookie,我们在Java(Servlet)中再次阅读
但是我们需要逃避cookie的价值,因为它可能包含非法字符,例如'&'这搞砸了饼干。
是否有透明的方法可以逃避(JavaScript)和再次使用unescape(Java)?
答案 0 :(得分:7)
在java中,你从StringEscapeUtils获得Commons Lang来逃避/不可见。
在Javascript中你通过encodeURIComponent逃脱,但我认为我给你的Commons组件将满足你的需求。
答案 1 :(得分:4)
客户端JavaScript / ECMAScript:
encodeURIComponent(cookie_value) // also encodes "+" and ";", see http://xkr.us/articles/javascript/encode-compare/
服务器Java:
String cookie_value = java.net.URLDecoder.decode(cookie.getValue());
我会向my blog entry添加更多发现。
答案 2 :(得分:1)
最准确的方法是在java代码中执行javascript。希望下面的代码有所帮助。
ScriptEngineManager factory = new ScriptEngineManager();
ScriptEngine engine = factory.getEngineByName("JavaScript");
ScriptContext context = engine.getContext();
engine.eval("function decodeStr(encoded){"
+ "var result = unescape(encoded);"
+ "return result;"
+ "};",context);
Invocable inv;
inv = (Invocable) engine;
String res = (String)inv.invokeFunction("decodeStr", new Object[]{cookie.getValue()});
答案 3 :(得分:1)
Common lang的StringEscapeUtils对我不起作用。
您可以简单地使用javascript nashorn引擎来转发转义的javascript字符串。
public class Enclosure {
@Attribute(name = "url")
private String url;
@Attribute(name = "length")
private long length;
@Attribute(name = "type")
private String type;
}