tomcat错误配置筛选器从web.xml中获得null



我在tomcat服务器的web.xml中配置了一些过滤器(如下所示(,这些过滤器以前在log4j1.x上运行时运行良好。

<filter>
<filter-name>newsession</filter-name>
<display-name>newsession</display-name>
<description>newsession</description>
<filter-class>com.demo.custom.filter.NewSession</filter-class>
<init-param>
<param-name>DomainName</param-name>
<param-value>.testlab.com</param-value>
</init-param>
<init-param>
<param-name>DomConfigFile</param-name>
<param-value>/opt/tomcat/webapp/demoapp/WEB-INF/classes/NAM_log4j.xml</param-value>
</init-param>
<init-param>
<param-name>customPropFile</param-name>
<param-value>/opt/tomcat/webapp/demoapp/WEB-INF/classes/custom_resources.properties</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>newsession</filter-name>
<url-pattern>/idff/sso</url-pattern>
</filter-mapping>

但现在,当我从log4j1.x移动到log4j2.x之后,当我们启动tomcat服务时,我们在日志中收到以下错误。如果我把";log4j-1.2.15.jar";再次提交它工作正常。但现在我们使用的是log4j2.x,所以我们不能使用旧的log4j1.x。

ERROR com.demo.custom.filter.NewSession - No transformation given
ERROR com.demo.custom.filter.NewSession - domConfigFile got null from web.xml, setting hardcoded value
ERROR com.demo.custom.filter.NewSession - custom_resources got null from web.xml, setting hardcoded value
main ERROR Error processing element category ([Configuration: null]): CLASS_NOT_FOUND
main ERROR Unknown object "root" of type org.apache.logging.log4j.core.config.LoggerConfig is ignored: try nesting it inside one of: ["Appenders", "Loggers", "Properties", "Scripts", "CustomLevels"]

下面给出了我的Java代码,我只粘贴了试图初始化servlet过滤器的代码。

package com.demo.custom.filter;
import javax.servlet.Filter;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
@WebFilter({ "/NewSession" })
public class NewSession implements Filter {
static class FilteredRequest extends HttpServletRequestWrapper {
public FilteredRequest(ServletRequest request) {
super((HttpServletRequest)request);
}
public String getParameter(String paramName) {
String value = super.getParameter(paramName);
*********************************************
return value;
}
public static String decryptValue(String value){
String decryptvalue = null;
********************************************
return decryptvalue;
}
}
private static String domainName = null;
private static String domConfigFile=null;
private static Logger myLogger = LogManager.getLogger(NewSession.class);
private String custom_resources;
public void init(FilterConfig fConfig) throws ServletException {
try{
domainName = fConfig.getInitParameter("DomainName");
domConfigFile=fConfig.getInitParameter("DomConfigFile");
custom_resources=fConfig.getInitParameter("customPropFile");
}catch(Exception e){
myLogger.error(e.getMessage());
}
if(domainName == null){
domainName = ".testlab.com";
}
if(domConfigFile==null){
myLogger.error("domConfigFile got null from web.xml, setting hardcoded value");
domConfigFile = "/opt/tomcat/webapp/demoapp/WEB-INF/classes/NAM_log4j.xml";
}
if(custom_resources==null){
myLogger.error("custom_resources got null from web.xml, setting hardcoded value");
nidp_custom_resources = "/opt/tomcat/webapp/demoapp/WEB-INF/classes/custom_resources.properties";
}
}
}

请帮我一下。我使用的是tomcat 9和log4j v2.17.1。

我的问题通过如下所示更改TEST_log4j.xml文件来解决。

<Configuration>
<Appenders>
<Console name="STDOUT" target="SYSTEM_OUT">
<PatternLayout pattern="%d{MM/dd HH:mm:ss} %-5p %30.30c %x - %mn"/>
</Console>
<RollingFile name="RollingFile" fileName="/opt/tomcat/logs/MyCustomClassLogs.log" filePattern="/opt/tomcat/logs/MyCustomClassLogs.log-%i">
<PatternLayout>
<pattern>%d{MM/dd HH:mm:ss} %-5p %30.30c %x - %mn</pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="5 MB" />
</Policies>
<DefaultRolloverStrategy max="5"/>
</RollingFile>
<RollingFile name="ResetClass" fileName="/opt/tomcat/logs/resetTrace.log" filePattern="/opt/tomcat/logs/resetTrace.log-%i">
<PatternLayout>
<pattern>%d{MM/dd HH:mm:ss} %-5p %30.30c %x - %mn</pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="5 MB" />
</Policies>
<DefaultRolloverStrategy max="5"/>
</RollingFile>
</Appenders>
<Loggers>
<Logger name="com.demo.custom.filter.ResetClass" level="TRACE">
<AppenderRef ref="ResetClass"/>
</Logger>
<Logger name="com.demo.custom.test.MyCustomClass" level="TRACE">
<AppenderRef ref="RollingFile"/>
</Logger>
<Root level="error">
<AppenderRef ref="STDOUT"/>
</Root>
</Loggers>
</Configuration>

您在标题中引用的错误消息"domConfigFile从web.xml获得null,设置了硬编码值">是由筛选器类上的@WebFilter引起的。此注释注册过滤器的第二个实例,该实例具有空配置(和空映射(。

如果您想要过滤器的单个实例,请将name="newsession"添加到@WebFilter注释中,或者使用完全限定类名(com.demo.custom.filter.NewSession(作为web.xml中的过滤器名称。

最新更新