こんにちは。
javaのプログラム初心者?です。
現在、すでに運用中のシステムのlog4jログに対し、セッションIDと利用者IDを付与するよう要望があり、対応しようとしています。
ネット上には、NDC機能を使ってlogにpushすれば可能、ということでプログラムを用意し、また、web.xml上にfilterを追加しようとしていますが、filter-mappingについてどこに配置するすればよいか分からずに困っているところです。
【環境】
OS:CentOS release 6.5 (Final)
tomcat:6.0.39
apache:2.2.21
java:1.7.0_45
【現在のfilter、filter-mapping(web.xml)】
<filter> <filter-name>encodingfilter</filter-name> <filter-class>org.seasar.extension.filter.EncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>Windows-31J</param-value> </init-param> </filter> <filter> <filter-name>requestDumpFilter</filter-name> <filter-class>org.seasar.extension.filter.RequestDumpFilter</filter-class> </filter> <filter> <filter-name>hotdeployfilter</filter-name> <filter-class>org.seasar.framework.container.hotdeploy.HotdeployFilter</filter-class> </filter> <filter> <filter-name>s2filter</filter-name> <filter-class>org.seasar.framework.container.filter.S2ContainerFilter</filter-class> </filter> <filter> <filter-name>routingfilter</filter-name> <filter-class>org.seasar.struts.filter.RoutingFilter</filter-class> <init-param> <param-name>jspDirectAccess</param-name> <param-value>false</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingfilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>hotdeployfilter</filter-name> <url-pattern>/*</url-pattern> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> <dispatcher>INCLUDE</dispatcher> <dispatcher>ERROR</dispatcher> </filter-mapping> <filter-mapping> <filter-name>s2filter</filter-name> <url-pattern>/*</url-pattern> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> <dispatcher>INCLUDE</dispatcher> <dispatcher>ERROR</dispatcher> </filter-mapping> <filter-mapping> <filter-name>NDCfilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>routingfilter</filter-name> <url-pattern>/*</url-pattern> <dispatcher>REQUEST</dispatcher> </filter-mapping> <filter-mapping> <filter-name>requestDumpFilter</filter-name> <url-pattern>*.do</url-pattern> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> <dispatcher>INCLUDE</dispatcher> <dispatcher>ERROR</dispatcher> </filter-mapping>
【追加したいfilter-mapping】
<filter> <filter-name>NDCfilter</filter-name> <filter-class>util.NdcFilter</filter-class> </filter> <filter> <filter-name>NDCfilter</filter-name> <filter-class>util.NdcFilter</filter-class> </filter>
【追加するプログラム】
java
1package util; 2 3import java.io.IOException; 4import java.util.Enumeration; 5 6import javax.servlet.Filter; 7import javax.servlet.FilterChain; 8import javax.servlet.FilterConfig; 9import javax.servlet.ServletException; 10import javax.servlet.ServletRequest; 11import javax.servlet.ServletResponse; 12import javax.servlet.http.HttpServletRequest; 13import javax.servlet.http.HttpSession; 14 15import org.apache.log4j.NDC; 16import org.slf4j.Logger; 17import org.slf4j.LoggerFactory; 18 19 20public final class NdcFilter implements Filter { 21 22 23 private static final Logger logger = LoggerFactory.getLogger(NdcFilter.class); 24 private FilterConfig filterConfig = null; 25 26 public void destroy() { 27 this.filterConfig = null; 28 } 29 30 public void doFilter(ServletRequest request, ServletResponse response, 31 FilterChain chain) throws IOException, ServletException { 32 if (filterConfig == null) { 33 return; 34 } 35 36 if (request instanceof HttpServletRequest) { 37 HttpServletRequest req = (HttpServletRequest) request; 38 39 HttpSession session = req.getSession(); 40 41 //if (session== null) { 42 43 Enumeration e = req.getParameterNames(); 44 45 while(e.hasMoreElements()) { 46 String key = (String)e.nextElement(); 47 48 //logger.debug(key + ":" + req.getParameter(key)); 49 50 if ( (key.equals("loginId")) || (key.equals("U"))){ 51 52 session.setAttribute("loginId_log4j", req.getParameter(key)); 53 logger.debug((String)session.getAttribute("loginId_log4j")); 54 break; 55 } 56 57 } 58 //} 59 NDC.push(req.getSession().getId() + " " + (String)session.getAttribute("loginId_log4j")); 60 61 try { 62 chain.doFilter(request, response); 63 } finally { 64 NDC.remove(); 65 } 66 } 67 } 68 69 public void init(FilterConfig filterConfig) throws ServletException { 70 this.filterConfig = filterConfig; 71 }
「encodingfilter」より後ということはわかっているのですが、そもそもそれぞれのフィルターの意味があまりよくわかっておらず、本番で障害となる恐れもあるので、各フィルターの意味も合わせて知りたいと思っています。
そこで、次の2点について、ご教示いただきたく、よろしくお願いします。
①各fillterについて、どんな役割をもっているか。
②【追加したいfilter-mapping】を追加する位置はどこが適当か。
ご協力よろしくお願いします!
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/08/10 23:46
退会済みユーザー
2015/08/11 00:59
退会済みユーザー
2015/08/11 00:59