[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 メーリングリストの案内