ログイン障害

擬似本番環境にアプリを上げたら、一度ログインしたあとに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;
    }
  }
}