根据项目的需要写了一个加密的标签,代码如下:
encrypt.tld
下面是java部分
Encrypt.java
下面是jsp部分
在js中标签无法将"<e:encrypt encryptValue='"+result +"'></e:encrypt>"
这种加密,因为里面有特殊字符。所有用result = encodeURI(result);来加密。
后台解析统一用java.net.URLDecoder.decode(result , "UTF-8");来解密。
这个可以解决传递中文参数乱码问题。
encrypt.tld
<?xml version="1.0" encoding="UTF-8"?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd"
version="2.0">
<tlib-version>1.0</tlib-version>
<short-name>mytaglib</short-name>
<uri>/encrypt-tags</uri>
<tag>
<name>encrypt</name>
<tag-class>com.ctitc.analysis.util.Encrypt</tag-class>
<attribute>
<name>encryptValue</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<body-content>empty</body-content>
</tag>
</taglib>
下面是java部分
Encrypt.java
package com.ctitc.analysis.util;
import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.SimpleTagSupport;
@SuppressWarnings("serial")
public class Encrypt extends SimpleTagSupport {
private String encryptValue;
public void doTag() throws JspException {
// TODO Auto-generated method stub
try {
encryptValue = java.net.URLEncoder.encode(encryptValue,"UTF-8");
getJspContext().getOut().write(encryptValue);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public String getEncryptValue() {
return encryptValue;
}
public void setEncryptValue(String encryptValue) {
this.encryptValue = encryptValue;
}
}
下面是jsp部分
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<%@taglib prefix="s" uri="/struts-tags" %>
<%@taglib prefix="e" uri="/encrypt-tags" %>
<HTML>
<HEAD>
<title>main</title>
<base href="<%=basePath%>">
<style type="text/css">
<!--
a:link { text-decoration: none;color: blue}
a:active { text-decoration:blink}
a:hover { text-decoration:underline;color: red}
a:visited { text-decoration: none;color: green}
body {
margin-left: 0px;
margin-top: 0px;
margin-right: 0px;
margin-bottom: 0px;
background-color: #E6F4FF;
}
-->
.STYLE1 {font-size: 10pt}
</style>
<link href="styles/sty.css" rel="stylesheet" type="text/css">
<script type="text/javascript">
function DoCheckAll(){
var chkItemArray = document.getElementsByName("chkItem");
var chkallstatus = document.getElementById("chkall").checked;
for(var i=0;i<chkItemArray.length;i++){
chkItemArray[i].checked = chkallstatus;
}
}
function deleteItem(cubeName){
var chkItemArray = document.getElementsByName("chkItem");
var result = "";
for(var i=0;i<chkItemArray.length;i++){
if(chkItemArray[i].checked){
if(result == ""){
result += chkItemArray[i].id;
}else{
result += ","+chkItemArray[i].id;
}
}
}
if(result == ""){
alert("请选择您要删除的记录!");
}else{
result = encodeURI(result);
document.location.href="measuresharedelete.action?fileName=${fileName }&measureName="+result+"&cubeName=<e:encrypt encryptValue='${cubeName }'></e:encrypt>";
}
}
</script>
</HEAD>
<body bgcolor="#eeeeee" topmargin="0" leftmargin="0" rightmargin="0">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td height="25" align="center" bgcolor="#AFDFFE">
<table width="97%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="59%">用户 <strong>sys</strong> 您现在的位置是: <a href="#"><strong>规费主题分析</strong></a>>><a href="#"><strong>共享度量</strong></a>>>度量列表</td>
<td width="41%" align="right">搜索内容:
<input name="textfield2" type="text" style="height=18" size="15"> <a href="#"><img src="images/tb_soso.gif" width="15" height="15" border="0"></a></td>
</tr>
</table>
</td>
</tr>
</table>
<br/>
<table width="97%" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#8C9FEB">
<tr bgcolor="#D4ECF8">
<td colspan="7"><div align="left"><strong>共享度量</strong></div>
<div align="left">
<a href="measureshare.action?fileName=${fileName }&cubeName=<e:encrypt encryptValue='${cubeName }'></e:encrypt> " ><img src="images/btn_zj.jpg" border="0"></a>
<a href="javascript:if(confirm('确认要删除选定的记录?'))deleteItem();"><img src="images/btn_sc.jpg" border="0"></a>
</div></td>
</tr>
<tr align="center" bgcolor="#91C6FC">
<td>全选<input type="checkbox" name="chkall" value="checkbox" onclick="DoCheckAll()"></td>
<td><div align="center"><strong>度量名称</strong></div></td>
<td><div align="center"><strong>度量列</strong></div></td>
<td><div align="center"><strong>度量描述</strong></div></td>
<td><div align="center"><strong>聚合</strong></div></td>
<td><strong>字符串格式</strong></td>
<td><div align="center"><strong>操作</strong></div></td>
</tr>
<s:iterator value="shareMeasureList">
<tr align="center" bgcolor="#FFFFFF">
<td bgcolor="#D4ECF8" > <input type="checkbox" id="${measureName }" name="chkItem" value="checkbox"></td>
<td><div align="center">${measureName }</div></td>
<td><div align="center">${column }</div></td>
<td><div align="center">
<div align="center">${caption }</div>
</div></td>
<td><div align="center">${aggregator }</div></td>
<td><div align="center">${formatString }</div></td>
<td><div align="center"><a href="measureshareinfo.action?measureName=<e:encrypt encryptValue='${measureName }'></e:encrypt>&fileName=${fileName }&cubeName=<e:encrypt encryptValue='${cubeName }'></e:encrypt>">修改</a></div></td>
</tr>
</s:iterator>
</table>
</body>
</HTML>
在js中标签无法将"<e:encrypt encryptValue='"+result +"'></e:encrypt>"
这种加密,因为里面有特殊字符。所有用result = encodeURI(result);来加密。
后台解析统一用java.net.URLDecoder.decode(result , "UTF-8");来解密。
这个可以解决传递中文参数乱码问题。