隱藏Jsp源代碼

雖然我們熱衷開源(Open Source),但是有時候我們還是有必要將自己的代碼加密混淆,防止對手據爲己有。關於Java代碼的混淆,網上說的很多,而對於Jsp提到的卻甚少,也許大家都將業務邏輯封裝到Java Bean中的原因吧,呵呵。下面以Weblogic(Windows平臺)爲例,談談如何隱藏Jsp代碼。

[b][Weblogic][/b]
一、用weblogic.jspc編譯JSP文件
a. 創建一個文件jspc.cmd
set JAVA_HOME=
@要包括jsp代碼依賴的jar
set CLASSPATH=
@rem 這是JSP編譯後的servlet文件的存放目錄
set TARGET_DIR=
@rem 這是你要發佈的Web Application的目錄
set WEBAPP_DIR=
java -classpath %CLASSPATH% weblogic.jspc -k -g -compileAll -d %TARGET_DIR% -webapp %WEBAPP_DIR%
b. 根據項目的情況,設置“=”右邊的值
c. 執行jspc.cmd文件,進行JSP文件的編譯,編譯後的class文件,應該在%TARGET_DIR%/jsp_servlet目錄下,可以將它放在項目的classes目錄下,也可以打包成jar

二、編譯成功後,將項目中的Jsp移走
三、編輯weblogic.xml文件,把jsp-descriptor標籤內的內容清空,加入如下的內容:
<jsp-descriptor>
<jsp-param>
<param-name>precompile</param-name>
<param-value>false</param-value>
</jsp-param>
<jsp-param>
<param-name>pageCheckSeconds</param-name>
<param-value>-1</param-value>
</jsp-param>
</jsp-descriptor>
四、編輯web.xml文件,在其中添加如下內容:
<servlet>
<servlet-name>JSPClassServlet</servlet-name>
<servlet-class>weblogic.servlet.JSPClassServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>JSPClassServlet</servlet-name>
<url-pattern>*.jsp</url-pattern>
</servlet-mapping>
五、重新發布項目,可以看到在沒有Jsp代碼的情況下,應用能成功被訪問

備註:上述方式,採用的其實就是jsp的預編譯,如果在預編譯的時候生成java文件,然後將java文件混淆編譯、打包,隱藏就更進一步了,呵呵


[b][Tomcat5.5][/b]

[code]
<?xml version="1.0" encoding="utf-8"?>
<project name="WebApp Precompilation JSP to Java to Class to Jar" basedir="." default="help">
<property name="tomcat.home" value="D:/tomcat5.5.15"/>
<property name="webapp.name" value="myapp"/>
<property name="webapp.path" value="D:/web"/>

<target name="all" depends="jsp2java,java2class,class2jar,clear"/>
<target name="help">
<echo message="顯示功能列表"/>
<echo message="jsp2java 通過JspC將JSP轉換成Java源代碼"/>
<echo message="java2class 將轉換後的Java源代碼進行編譯成class文件"/>
<echo message="class2jar 將編譯後的class文件打包"/>
<echo message="clear 清理現場"/>
</target>
<target name="jsp2java">
<taskdef classname="org.apache.jasper.JspC" name="jsp2java">
<classpath id="jsp2java.classpath">
<fileset dir="${tomcat.home}/bin">
<include name="*.jar"/>
</fileset>
<fileset dir="${tomcat.home}/server/lib">
<include name="*.jar"/>
</fileset>
<fileset dir="${tomcat.home}/common/lib">
<include name="*.jar"/>
</fileset>
</classpath>
</taskdef>
<!-- 注意JSP文件要設置爲UTF-8編碼 -->
<jsp2java classpath="jsp2java.classpath" javaEncoding="UTF-8" validateXml="false" uriroot="${webapp.path}"
webXmlFragment="${webapp.path}/WEB-INF/webJSP.xml" outputDir="${webapp.path}/WEB-INF/JspC/src"/>
</target>
<target name="java2class">
<mkdir dir="${webapp.path}/WEB-INF/JspC/classes"/>
<!-- 同樣Java文件要設置爲UTF-8編碼 -->
<javac srcdir="${webapp.path}/WEB-INF/JspC/src" destdir="${webapp.path}/WEB-INF/JspC/classes" encoding="UTF-8"
optimize="off" debug="on" failοnerrοr="false" excludes="**/*.smap">
<classpath id="java2class.classpath">
<pathelement location="${webapp.path}/WEB-INF/classes"/>
<fileset dir="${webapp.path}/WEB-INF/lib">
<include name="*.jar"/>
</fileset>
<pathelement location="${tomcat.home}/common/classes"/>
<fileset dir="${tomcat.home}/common/lib">
<include name="*.jar"/>
</fileset>
<pathelement location="${tomcat.home}/shared/classes"/>
<fileset dir="${tomcat.home}/shared/lib">
<include name="*.jar"/>
</fileset>
<fileset dir="${tomcat.home}/bin">
<include name="*.jar"/>
</fileset>
</classpath>
<include name="**"/>
<exclude name="tags/**"/>
</javac>
</target>
<target name="class2jar">
<mkdir dir="${webapp.path}/WEB-INF/lib"/>
<jar basedir="${webapp.path}/WEB-INF/JspC/classes" jarfile="${webapp.path}/WEB-INF/lib/${webapp.name}JSP.jar"/>
</target>
<target name="clear">
<delete dir="${webapp.path}/WEB-INF/JspC/classes"/>
<delete dir="${webapp.path}/WEB-INF/JspC/src"/>
<delete dir="${webapp.path}/WEB-INF/JspC"/>
</target>
</project>
[/code]

修改相關配置後,運行ant all,生成好的jar文件是{$webappname}JSP.jar。在做爲產品發佈的時候,只需要你的類jar包和JSP預編譯的包放到WEB-INF\lib\目錄下即可,如${webappname}.jar和JSP預編譯的包${webappname}JSP.jar;然後刪除掉你的JSP源文件;並且將${webapp.path}/WEB-INF/webJSP.xml裏的servlet映射,添加到${webapp.path}/WEB-INF/web.xml裏面。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章