Filter Struts 2拦截器中的Log4j(SLF4J)MDC上下文
我发现可以在通用过滤器(代码来自)中以线程安全的方式设置Log4j(SL4J)MDC上下文 我可以在Struts 2拦截器中使用相同的方法吗?!我想知道的是线程安全问题 Struts 2拦截器和servlet过滤器并非都是线程安全的,Filter Struts 2拦截器中的Log4j(SLF4J)MDC上下文,filter,struts2,slf4j,log4j2,struts2-interceptors,Filter,Struts2,Slf4j,Log4j2,Struts2 Interceptors,我发现可以在通用过滤器(代码来自)中以线程安全的方式设置Log4j(SL4J)MDC上下文 我可以在Struts 2拦截器中使用相同的方法吗?!我想知道的是线程安全问题 Struts 2拦截器和servlet过滤器并非都是线程安全的,MDC实现是线程安全的,因此,如果上述代码在过滤器中运行良好,理论上它在拦截器中必须是线程安全的 有什么评论吗 拦截器不是线程安全的,这意味着您必须以线程安全的方式编写拦截器。例如,下面的拦截器是线程安全的 公共类LoggerInterceptor扩展了Abstra
MDC
实现是线程安全的,因此,如果上述代码在过滤器中运行良好,理论上它在拦截器中必须是线程安全的
有什么评论吗 拦截器不是线程安全的,这意味着您必须以线程安全的方式编写拦截器。例如,下面的拦截器是线程安全的
公共类LoggerInterceptor扩展了AbstractInterceptor{
@凌驾
公共字符串截获(ActionInvocation调用)引发异常{
HttpSession session=ServletActionContext.getRequest().getSession();
User=(User)session.getAttribute(“USerSession”);
put(“userName”,user.getUserName());
字符串结果;
试一试{
结果=invocation.invoke();
}最后{
删除(“用户名”);
}
返回结果;
}
}
import org.slf4j.MDC;
import javax.servlet.*;
import java.io.IOException;
public class MDCFilter implements Filter {
@Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
throws IOException, ServletException {
User user= (User) session.getAttribute("USerSession");
MDC.put("userName", user.getUserName() );
try {
chain.doFilter(req, resp);
} finally {
MDC.remove("userName");
}
}
}