擬似本番環境にアプリを上げたら、一度ログインしたあとに404エラーになって、もう一度ブラウザリロードするとログイン入れる、という現象が出たと報告があった。
大至急BadBoyを使って調べてみたら、どうやらjsessionidが引っ付いていると、擬似本番環境のプロキシサーバがうまくリクエストを流してくれないような感じだった。
であれば、コンテナにセッションをCookieだけしか使わない設定をすればいいかなと思い、OC4Jのコンパネを調べたが、どうもそれっぽい項目がなく、google先生からも「セッションの設定が無い」「バグってるっぽい」「たま行くならこんな店」のようなそっけない検索結果しか引っかからず、かつ担当SEから、午後までに直らなかったSATSUGAI!などと軽く脅されたので、僕は顔を真っ青にしながらこんな感じの逃げFilterを書いた。
public class NoEncodeURLResponseFilter implements Filter { public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { chain.doFilter(req, new NoEncodeURLResponseWrapper((HttpServletResponse) res)); } public void init(FilterConfig config)throws ServletException { } public void destroy() { } private static final class NoEncodeURLResponseWrapper extends HttpServletResponseWrapper { public NoEncodeURLResponseWrapper(HttpServletResponse response) { super(response); } @Override public String encodeRedirectUrl(String url) { return url; } @Override public String encodeRedirectURL(String url) { return url; } @Override public String encodeUrl(String url) { return url; } @Override public String encodeURL(String url) { return url; } } }