[Seasar-user:10888] Re: [S2Struts]WebSphere6.1でS2StrutsFilterがunavailable

Minoru Taki [E-MAIL ADDRESS DELETED]
2007年 10月 5日 (金) 09:07:51 JST


瀧です。

 お世話になります。

 いろいろと分かったことがありましたので、ご報告します。

 まず、com.ibm.ws.webcontainer.removetrailingservletpathslashについては
 認識はしているものの、問題の現象についての変化はありませんでした。

 次に、getPathInfo()がどうなっているかをS2StrutsFilterをオーバライドして
 検証したところ、確かにnull値になっていました。
 当方のWebSphere環境では、FORM認証を実装しているため、ログイン時に
 j_security_checkにアクセスしています。
 j_security_checkがコールされる際にはgetPathInfo()もgetServletPath()も双方とも
 null値になります。

 Tomcatの環境ではj_security_checkが動作する際にはフィルタが実行されないため、
 問題が発生しないのではないかと思います。

 このあたり、サーブレットコンテナの実装の違いがあるようです。
#サーブレットコンテナのバグではなくて仕様のような気がしています。

 試しに簡易的に下記のようにj_security_checkの時だけS2StrutsFilter#doFilter()を
 実行しないようにしたところ、unavailableの現象は解消されました。(他にもまだ・・・)
#この実装について妥当かどうかは判断できないですが・・・。

 WebSphere + S2Struts + FORM認証の組合せって
 どこかでやってても良さそうですが、
 この現象って発生してないでしょうか?

 S2Struts側の処理を変更するかどうかについては、一度ご検討頂けると幸いです。

 以上、よろしくお願い致します。

----
public class HogeStrutsFilter extends S2StrutsFilter {

 private static Logger logger = HogeLoggerUtil.getLogger(HogeStrutsFilter.class);

 public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {

  try{
   HttpServletRequest request = (HttpServletRequest)req;
   logger.debug("getRequestURI:"+request.getRequestURI()+",getServletPath:"+request.getServletPath()+",getPathInfo:"+request.getPathInfo());
   if(request.getRequestURI().endsWith("j_security_check")){
    chain.doFilter(req, res);
    return;
   }
  } catch (Exception e){
  }

  super.doFilter(req, res, chain);
 }

}
----

----- Original Message ----- 
From: "Minoru Taki" <[E-MAIL ADDRESS DELETED]>
To: <[E-MAIL ADDRESS DELETED]>
Sent: Thursday, October 04, 2007 11:10 AM
Subject: [Seasar-user:10870] Re:[S2Struts]WebSphere6.1でS2StrutsFilterがunavailable


> 中村さん
>
>  瀧です。
>
>  お世話になります。
>
>  HttpServletRequest#getPathInfo()
>  というキーワードを頂き
>  ちょうどそのページを見ておりました。
>
>  6.1.0.11のパッチは既に当てているのですが、
>  Webコンテナのカスタムプロパテイの
>  com.ibm.ws.webcontainer.removetrailingservletpathslash
>  を"trueに"しないと、有効にならないようですね。
>
>  トライしてみます。
>  また、結果をご報告します。
>
>  ありがとうございました。
>
> ----- Original Message ----- 
> From: "Toshihiro Nakamura" <[E-MAIL ADDRESS DELETED]>
> To: <[E-MAIL ADDRESS DELETED]>
> Sent: Thursday, October 04, 2007 10:59 AM
> Subject: [Seasar-user:10869] Re: [S2Struts]WebSphere6.1でS2StrutsFilterがunavailable
>
>
>> 中村(taedium)です。
>>
>>> >  S2Struts-1.2.10をWebSphere6.1で動作させようとしていますが、Actionを実行させる際に
>>> >  s2strutsfilter(org.seasar.struts.filter.S2StrutsFilter)でNullPointerが発生しています。
>>>
>>> スタックトレースを見る限り、
>>> HttpServletRequest#getServletPath()がnullを返しているのが原因のようです。
>>>
>>> Javadocを見る限りこのメソッドがnullを返すように見えないのですが、
>>> どういときにnullを返すのか、
>>> 正しい挙動なのか、
>>> といったことをIBMに問い合わせてみるといいのではないでしょうか。
>>
>> 補足です。
>>
>> 上記の現象が起こる場合に、
>> HttpServletRequest#getPathInfo()
>> の値はどうなっているでしょうか。
>>
>> もし、こちらの値が正しいならば、
>> 先にHttpServletRequest#getPathInfo()を見て値があればこれを使い、
>> 値がなければ次にHttpServletRequest#getServletPath() を使うと
>> いったようにS2Strutsの処理を変更することを検討したいと思います。
>>
>>
>> あと、関係するかどうかわからないのですが、
>> ちょっと気になるFix Packの情報を見たので一応お伝えしておきます。
>> http://www-1.ibm.com/support/docview.wss?rs=180&uid=swg1PK39337
>>
>> -- 
>> Toshihiro Nakamura <[E-MAIL ADDRESS DELETED]>
>>
>> _______________________________________________
>> Seasar-user mailing list
>> [E-MAIL ADDRESS DELETED]
>> https://ml.seasar.org/mailman/listinfo/seasar-user
>>
>
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
> 





Seasar-user メーリングリストの案内