使用jfinalQ-encrypt开源软件。对项目的class文件加密,防止反编译,可自定义加密解密算法,支持tomcat部署。
2.1 首先将class文件进行字节流加密;
2.2 然后自定义tomcat的ClassLoader;
2.3 最后通过自定义的ClassLoader解密并加载class。
本节以Test项目为例,对其class文件进行加密。并用自定义的classloader进行解密。
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<servlet>
<servlet-name>HelloServletservlet-name>
<servlet-class>com.demo.HelloServletservlet-class>
servlet>
<servlet-mapping>
<servlet-name>HelloServletservlet-name>
<url-pattern>/HelloServleturl-pattern>
servlet-mapping>
web-app>
package com.demo;
import java.io.IOException;
/**
* 请求地址 :http://localhost:8080/Test/HelloServlet
*/
public class HelloServlet extends HttpServlet {
// handle post request
private static final long serialVersionUID = 1L;
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String name = request.getParameter("userName");
response.setContentType("text/html");
response.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
out.println("欢迎你: "+new String(name.getBytes("ISO-8859-1"), "UTF-8")+ "!");
}
// destroy
public void destroy() {
}
}
<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"
language="java"%>
<html>
<head>
<title>HelloServlettitle>
head>
<body>
<form action="HelloServlet" name="form" method="post">
姓名:<input type="text" name="userName"><br> <input
type="submit" value="登录">
form>
body>
html>
此时部署成功后经测试,tomcat下class文件可以轻松反编译,JSP页面可正常访问servlet文件。接下来对class文件进行加密。
- 加密成功后显示
覆盖完成后,不要做修改代码,clean等操作,否则加密后的class会被再次覆盖。
- 点击登录后返回
此配置文件指定了自定义的ClassLoader需要进行解析的classs文件范围。
encrypted_package=com.demo
encrypted_class_path=D\:/apache-tomcat-7.0.70/webapps/Test/WEB-INF/classes/
将jfinalQ-encrypt中的loader包和QClassUtil打为一个jar,并命名为++classloaderQ.jar++,如下图所示:
<Loader loaderClass="com.uikoo9.loader.QClassLoader" delegate="true">Loader>
把classloaderQ.jar放到Tomcat的lib(D:\apache-tomcat-7.0.70\lib)文件夹下面。
由于时间原因,jfinalQ-encrypt源代码没能细读,只能做到初步应用,此文有待逐步后续完善。