Jboss Seam'de URL'lere ;jsessionid=xxxxxxxxxxxxx şeklinde bir parametre eklenmektedir. Google Bot'u web sitesini indexlediğinde bu jsessionid parametreleri URL'e dahil etmektedir ve bu değer değiştiğinden aynı URL'i farklı bir URL gibi görmektedir. Bunu engelmek için aşağıdaki gibi bir Filter kullanabilsiniz. Ayrıca bu filter /a4j/s/ ile başlayan URL'lerden de jsessionid parametresini kaldırmaktadır.
import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class DisableUrlSessionFilter implements Filter { private static final String GOOGLEBOT_AGENT_STRING = "googlebot"; private static final String USER_AGENT_HEADER_NAME = "User-Agent"; public void doFilter(final ServletRequest pRequest, final ServletResponse pResponse, final FilterChain pChain) throws IOException, ServletException { if (!(pRequest instanceof HttpServletRequest)) { pChain.doFilter(pRequest, pResponse); return; } HttpServletRequest httpRequest = (HttpServletRequest) pRequest; HttpServletResponse httpResponse = (HttpServletResponse) pResponse; boolean isGoogleBot = false; if (httpRequest != null) { String userAgent = httpRequest.getHeader(USER_AGENT_HEADER_NAME); if (userAgent != null && userAgent.length() > 0) { if (userAgent.toLowerCase().indexOf(GOOGLEBOT_AGENT_STRING) > -1) { isGoogleBot = true; } } } boolean isXCSSFiles = false; String requestURL=httpRequest.getRequestURL().toString(); if(requestURL.indexOf("/a4j/s/")!=-1){ isXCSSFiles=true; } if (isGoogleBot || isXCSSFiles) { HttpServletResponseWrapper wrappedResponse = new HttpServletResponseWrapper(httpResponse) {
@Override public String encodeRedirectUrl(final String url) { return url; } @Override public String encodeRedirectURL(final String url) { return url; } @Override public String encodeUrl(final String url) { return url; } @Override public String encodeURL(final String url) { return url; } }; pChain.doFilter(pRequest, wrappedResponse); } else { pChain.doFilter(pRequest, pResponse); } } public void init(final FilterConfig pConfig) throws ServletException {} public void destroy() {} }