- Struts 1系の最新版をダウンロードし、lib直下のcommons-beanutils-1.8.0.jarを、プロジェクトのlib下にコピー
- 今ま利用されていたcommons-beanutils.jarを削除
- eclipseで反映 (properties->Java Build Path->Libraries->Add JARS...)
プロジェクト内にDefaultResolverを継承したクラスを追加
package common.resolver;
import org.apache.commons.beanutils.expression.DefaultResolver;
/**
* 静寂性対策 2014-04-28
* @author canu
*/
public class SafeResolver extends DefaultResolver {
@Override
public String next(String expression) {
String property = super.next(expression);
if ("classLoader".equalsIgnoreCase(property)) {
return "";
}
return property;
}
}
'classLoader'という引数が渡された場合は ""をリターン
上記クラスが反映されるように、Web アプリケーションの初期化処理する箇所や、最初の方に呼び出されるクラスの static 初期化子内など、適切な箇所に記述します。たとえば、struts-config.xmlにcontrollerを追加する: ↓↓↓
<struts-config>
...
<controller processorClass="common.action.MyProcessor" />
<//struts-config>
web.xml
package common.action;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.RequestProcessor;
import common.resolver.SafeResolver;
public class MyProcessor extends RequestProcessor {
protected ActionForward processActionPerform(
HttpServletRequest request,
HttpServletResponse response,
Action action,
ActionForm form,
ActionMapping mapping)
throws IOException, ServletException {
BeanUtilsBean.getInstance().getPropertyUtils().setResolver(new SafeResolver());
}
}
MyProcessor
- "SafeResolver"にbreakpointを追加
- ブラウザーで"actionForm"を利用するActionクラスのpathに "?classLoader=hogehage"を追加
例:http://127.0.0.1:8080/myproject/myAction.do?classLoader=hogehage