[Tomcat source code analysis] Eclipse built in Apache Tomcat source code debugging environment

Many articles have recommended the use of the Internet to download Ant to compile, but repeatedly failed to local practice, can not be downloaded.

Later reference https://blog.csdn.net/xiongyouqiang/article/details/78941077 managed to build a complete debugging environment.

The following article is almost completely copy the URL above, but slightly extended.

Download Source

Official website to download the source

http://tomcat.apache.org/download-70.cgi 

Source into Eclipse

Step 1: Eclipse create a new Java Project, such as the name may be a Tomcat-Src

Step 2: Right-click on the project => Import => General => File System, click the Next button.

 

Step 3: Click the Browser button to locate the tomcat source extraction path, check java, test, conf and webapps directory (note do not need to check the examples directory), click on the Finish button.

 

 Step 4: Right-click on the directory java and test => Build Path => Use As Source Folder the two directory to source directory. At the same time you can delete any original src directory of the project.

Step 5: Import resolve compilation errors that appear in the project, usually due to the lack of certain jar lead

The main import the following jar full

ant.jar

ecj-4.4.2.jar

jaxrpc.jar

wsdl4j-1.5.2.jar 

easymock-3.5.1.jar

In a new project in the lib directory, these jar package into the directory, and add to the build path.

apache tomcat using junit as unit testing tool Junit we need to add support for the project, right click on the project => Properties => Java build path.

Click the Add Library button, you can select Junit4.

 

 

此时test包中的TestCookieFilter类会报CookieFilter编译异常,这是因为缺少CookieFilter这个类导致,经过一番查找总算找到了CookieFilter源码如下所示:

/*

* Licensed to the Apache Software Foundation (ASF) under one or more

* contributor license agreements. See the NOTICE file distributed with

* this work for additional information regarding copyright ownership.

* The ASF licenses this file to You under the Apache License, Version 2.0

* (the "License"); you may not use this file except in compliance with

* the License. You may obtain a copy of the License at

*

* http://www.apache.org/licenses/LICENSE-2.0

*

* Unless required by applicable law or agreed to in writing, software

* distributed under the License is distributed on an "AS IS" BASIS,

* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

* See the License for the specific language governing permissions and

* limitations under the License.

*/

package util;

 

import java.util.Locale;

import java.util.StringTokenizer;

 

/**

* Processes a cookie header and attempts to obfuscate any cookie values that

* represent session IDs from other web applications. Since session cookie names

* are configurable, as are session ID lengths, this filter is not expected to

* be 100% effective.

*

* It is required that the examples web application is removed in security

* conscious environments as documented in the Security How-To. This filter is

* intended to reduce the impact of failing to follow that advice. A failure by

* this filter to obfuscate a session ID or similar value is not a security

* vulnerability. In such instances the vulnerability is the failure to remove

* the examples web application.

*/

public class CookieFilter {

 

private static final String OBFUSCATED = "[obfuscated]";

 

private CookieFilter() {

// Hide default constructor

}

 

public static String filter(String cookieHeader, String sessionId) {

 

StringBuilder sb = new StringBuilder(cookieHeader.length());

 

// Cookie name value pairs are ';' separated.

// Session IDs don't use ; in the value so don't worry about quoted

// values that contain ;

StringTokenizer st = new StringTokenizer(cookieHeader, ";");

 

boolean first = true;

while (st.hasMoreTokens()) {

if (first) {

first = false;

} else {

sb.append(';');

}

sb.append(filterNameValuePair(st.nextToken(), sessionId));

}

 

 

return sb.toString();

}

 

private static String filterNameValuePair(String input, String sessionId) {

int i = input.indexOf('=');

if (i == -1) {

return input;

}

String name = input.substring(0, i);

String value = input.substring(i + 1, input.length());

 

return name + "=" + filter(name, value, sessionId);

}

 

public static String filter(String cookieName, String cookieValue, String sessionId) {

if (cookieName.toLowerCase(Locale.ENGLISH).contains("jsessionid") &&

(sessionId == null || !cookieValue.contains(sessionId))) {

cookieValue = OBFUSCATED;

}

 

return cookieValue;

}

}

 

此时仍有部分error,但不影响调试

设置Debug Configuration,设定程序入口,开始调试!

 

 


————————————————
原文链接:https://blog.csdn.net/xiongyouqiang/article/details/78941077

 

Guess you like

Origin www.cnblogs.com/tyyt/p/12032268.html