Un-escape JavaScript escaped value in Java

前端 未结 4 1495
醉梦人生
醉梦人生 2021-01-18 23:05

In our web service we set a cookie through JavaScript wich we read again in Java (Servlet)

However we need to escape the value of the cookie because it may contain i

相关标签:
4条回答
  • 2021-01-18 23:40

    The most accurate way would be to Excecute javascript withing your java code. Hope the code below helps.

    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()});
    
    0 讨论(0)
  • 2021-01-18 23:55

    Common lang's StringEscapeUtils didn't work for me.

    You can simply use javascript nashorn engine to unescape a escaped javascript string.

    private String decodeJavascriptString(final String encodedString) {
        ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
        Invocable invocable = (Invocable) engine;
        String decodedString = encodedString;
        try {
            decodedString = (String) invocable.invokeFunction("unescape", encodedString);
    
        } catch (ScriptException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        }
    
        return decodedString;
    }
    
    0 讨论(0)
  • 2021-01-18 23:56

    In java you got StringEscapeUtils from Commons Lang to escape/unescape.

    In Javascript you escape through encodeURIComponent, but I think the Commons component I gave to you will satisfy your needs.

    0 讨论(0)
  • 2021-01-18 23:56

    Client JavaScript/ECMAScript:

    encodeURIComponent(cookie_value) // also encodes "+" and ";", see http://xkr.us/articles/javascript/encode-compare/
    

    Server Java:

    String cookie_value = java.net.URLDecoder.decode(cookie.getValue());
    

    I'll add further discoveries to my blog entry.

    0 讨论(0)
提交回复
热议问题