1
我發現一個可以在一般的過濾器設置的Log4j(SL4J)MDC方面的線程安全的方式(代碼從http://blog.trifork.com/2013/06/06/adding-user-info-to-log-entries-in-a-multi-user-app-using-mapped-diagnostic-context/)的Log4j(SLF4J)MDC上下文中的Struts 2攔截
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");
}
}
}
能我在Struts 2攔截器中採用了相同的方法?!我想知道的是線程安全問題。
Struts 2攔截器和servlet過濾器不是線程安全的,MDC實現也是線程安全的,所以如果上面的代碼在過濾器中工作正常,理論上它必須在攔截器中工作線程安全。
有什麼意見?