【问题标题】:org.owasp.esapi.errors.ConfigurationException: java.lang.reflect.InvocationTargetException Error while invoking ESAPI.encoder()org.owasp.esapi.errors.ConfigurationException: java.lang.reflect.InvocationTargetException 调用 ESAPI.encoder() 时出错
【发布时间】:2021-03-24 07:45:43
【问题描述】:

执行以下代码时出现以下错误。它之前正在工作,现在突然开始抛出这个异常。

import org.owasp.esapi.ESAPI;
import org.owasp.esapi.Encoder;
import org.owasp.esapi.codecs.Codec;
import org.owasp.esapi.codecs.OracleCodec;
public List<SearchUserBean> getSearchUserResult(SearchUserBean searchUserBean){
Codec ORACLE_CODEC = new OracleCodec();
String WHERE="WHERE be.EMPLOYER_ID   =comp.business_asso ";
        if (searchUserBean.getEmailAddress()!=null && !(searchUserBean.getEmailAddress().isEmpty())) {
            WHERE +="AND upper(be.EMAIL_ID) LIKE '" +ESAPI.encoder().encodeForSQL( ORACLE_CODEC, searchUserBean.getEmailAddress().replace("*", "%").toUpperCase().trim()) +"' ";
        }   
return null;    
}

收到错误。

org.owasp.esapi.errors.ConfigurationException: java.lang.reflect.InvocationTargetException Encoder class (org.owasp.esapi.reference.DefaultEncoder) CTOR threw exception.
at org.owasp.esapi.util.ObjFactory.make(ObjFactory.java:129)
at org.owasp.esapi.ESAPI.encoder(ESAPI.java:99)
at com.beacon.search.dao.impl.SearchUserDaoImpl.getSearchUserResult(SearchUserDaoImpl.java:73)
at com.beacon.search.services.impl.SearchUserServiceImpl.getSearchUserResult(SearchUserServiceImpl.java:68)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at com.sun.proxy.$Proxy294.getSearchUserResult(Unknown Source)
at com.beacon.search.controller.SearchUserController.getSearchUserResult(SearchUserController.java:133)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:219)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:745)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:686)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:936)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.

【问题讨论】:

  • 首先,我希望 ESAPI 代码是临时的,因为如果不是时候使用PreparedStatement. 重写 ESAPI 不如您的 Oracle Provider 的转义工具好。我将首先在这里重写您的代码,以便每个操作都有自己的行。检查您的日志以了解 ESAPI 初始化的错误。这听起来一点也不像是 ESAPI 的问题,而是它是如何被注入到您的环境中的。
  • 我们没有做任何代码更改,这是我们从事件日志中得到的,我们也做了一个操作系统补丁会导致这个问题。

标签: java servlets esapi


【解决方案1】:

@Vidyuth - 我有几个问题。

  1. 上次运行时您使用的是什么版本的 ESAPI,现在使用的是什么版本?
  2. 在您的 ESAPI.properties 文件中,您将属性“ESAPI.Logger”设置为什么?

我问的一个原因是因为在 ESAPI 2.2.1.0 版本中,一些日志记录被重组,所以如果你来自早期版本并且没有更新 ESAPI.Logger,事情就会中断。以下是 ESAPI 2.2.1.0 的部分发行说明:

    *** IMPORTANT WORKAROUND for 2.2.1.0 ESAPI Logging ***

Lastly, if you try to use the new ESAPI 2.2.1.0 logging, you will notice that you need to change ESAPI.Logger and also possibly provide some other logging properties as well. This is because the logger packages were reorganized to improve maintainability, but we failed to mention it. To use ESAPI logging in ESAPI 2.2.1.0 (and later), you MUST set the ESAPI.Logger property to one of:

    org.owasp.esapi.logging.java.JavaLogFactory     - To use the new default, java.util.logging (JUL)
    org.owasp.esapi.logging.log4j.Log4JLogFactory   - To use the end-of-life Log4J 1.x logger
    org.owasp.esapi.logging.slf4j.Slf4JLogFactory   - To use the new (to release 2.2.0.0) SLF4J logger

【讨论】:

  • 我们使用 esapi-2.0.1 版本,是的,我们也设置了记录器 ESAPI.Logger=org.owasp.esapi.reference.Log4JLogFactory。我们已经完成了一个影响我们代码的操作系统补丁。
  • 认真的吗? 2.0.1? 2011 年 7 月发布的版本?还是那个'2.0.1'是一个错字?我希望如此。 ESAPI 2.2.3.0 上周刚刚发布,如果您可以重现您的问题并将 ESAPI.Logger 重置为正确的新值,那么我们鼓励您编写一个小型 JUnit 测试来重现它并创建一个 GitHub 问题.但由于所有过时的依赖项,2.0.1 可能会让您面临风险,因此我鼓励您尽快升级。
  • 它在重启后工作,每当我们安装一个战争它需要重启,否则它会抛出上述错误,我不明白根本原因。
  • 一些 JavaEE 应用程序服务器“爆炸”war 文件,我发现当您尝试热部署时会导致缓存问题。通常对于单个 JSP 可以正常工作,但对于其他任何事情,IBM 全球服务运营人员(在我以前的工作中)通常会重新启动应用程序服务器。不确定这是否是您的问题,但我认为这不是 ESAPI 特定的。但是,如果您可以提供使用最新 ESAPI 版本重现它的步骤,请为它提交一个 GitHub 问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-19
  • 2013-04-08
  • 1970-01-01
  • 2014-06-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多