当前位置: 代码迷 >> Java Web开发 >> java URL 编码解码,该如何解决
  详细解决方案

java URL 编码解码,该如何解决

热度:742   发布时间:2016-04-16 21:55:21.0
java URL 编码解码
我写了两个接口 一个是对字符串加密 的,一个是解密的  。加密的可以通过调用接口生成加密字符串如下:
Oc0PEwKrLzHqT25hYLhWP5wlk5HROPJoWC3chlqMHBoxLQ/WUcbKwsamjy+N2RsBDwFnFegg1tQXmuvWUcuxIMKwMC8RCjWjgVVCH385LBiXkGLM+q9hhlfEMjavM0vHfvx02/Af+njixF7M2yuVmf6lhH2BnQ2j4sR12HvfRHbDnzKQbhrydNh7k90qB43B
可是解密的时候 在MAIN方法测试可以解密,但是通过URL调用接口的时候就出错了 ,听说是url编码问题 不太了解,如下是解密的接口:
	/**
 * 对密钥解密
 * @param enStr
 * @return
 * @throws Exception
 */
@ResponseBody
@RequestMapping(value="/deCryptKey/{enStr}",method=RequestMethod.GET)
public String deCryptKey(@PathVariable("enStr") String enStr) throws Exception{
//enStr = new String(enStr.getBytes("iso-8859-1"),"utf-8");
//enStr = java.net.URLDecoder.decode(enStr,"utf-8");
String deStr = KmService.deCryptKey(enStr);
return deStr;
}

------解决思路----------------------
你可以尝试用URLEncoder再加密一次。
------解决思路----------------------
没猜错的话,你应该是
加密:字符串->url传输->加密后的字符串
解密:解密后的字符串->url传输->字符串
很明显在url编码的时候出了问题,用spring框架么,问题是比较多的,别特是其内部写死了编码方式,so你需要两部操作
server.xml添加

 <Connector connectionTimeout="20000" port="80" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>

web.xml添加

<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>  
<filter-name>EncodingFilter</filter-name>  
<url-pattern>*.action</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>

------解决思路----------------------
把已经加密的字符串再编码一次,获取到后再解码

//step1
String code= "Oc0PEwKrLzHqT25hYLhWP5wlk5HROPJoWC3chlqMHBoxLQ/WUcbKwsamjy+N2RsBDwFnFegg1tQXmuvWUcuxIMKwMC8RCjWjgVVCH385LBiXkGLM+q9hhlfEMjavM0vHfvx02/Af+njixF7M2yuVmf6lhH2BnQ2j4sR12HvfRHbDnzKQbhrydNh7k90qB43B
"
//编码
String urlEnCode = URLEncoder.encode(code,"UTF-8");

//step2
//解码
String urlDeCode = URLDecoder.decode(urlEnCode,"UTF-8");
//再解码
String deStr = KmService.deCryptKey(enStr); 

  相关解决方案