1

私はサーブレット フィルターの問題で立ち往生しており、誰かが私を助けてくれることを望んでいます。私が持っているのは、JBoss 7.1.1 で実行しているサーブレット フィルター (SSO Fedlet です) です。

これは単純な「Hello World」アプリケーションで、単純に「Hello World」を含む index.jsp にアクセスする前に、SSO が機能するようにテストしようとしています。

私の doFilter メソッドでは、handleSSO 呼び出しに入り、戻ると、chain.doFilter(req,res); を呼び出します。

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

    HttpServletRequest request = (HttpServletRequest) req;
    HttpServletResponse response = (HttpServletResponse) res;


    handleSSO(request, response); //logs in user etc..
     chain.doFilter(req, res);

}
private void handleSSO(HttpServletRequest request, HttpServletResponse response) {
    //login code here where the initiateAuthnRequest occurs for the IdP
    //if successful then do this:
    response.sendRedirect(getRedirectURL(request)); //this is /HelloWorld/
}

sendRedirect が呼び出された後、doFilter に戻り、chain.doFilter が呼び出されます。
その後、IllegalStateException が発生します。調べてみると、sendRedirect と chain.doFilter の両方を実行することはできないと読みました。そのため、chain.doFilter の周りにいくつかのロジックを配置し、リダイレクトが発生していない場合にのみ呼び出します。ただし、これが発生すると、doFilter で無限ループが発生します。あたかも何度も再認証しているかのように...

それで、私の web.xml には微調整が必​​要だと思いました。これは次のようになります。

<filter>
<filter-name>SamlFilter</filter-name>
     <filter-class>com.gsk.servlet.filters.SAMLFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>SamlFilter</filter-name>
     <url-pattern>/*</url-pattern>
 </filter-mapping>

したがって、私の考えでは、URL パターンが /* であるため、認証を試行し続けます。これをテストするために、url-pattern を /HelloWorld/ に変更しました。ただし、これを行うと、フィルター コードに入ることがなく、index.jsp ページが表示されます。

私は解決策が何であるかについて行き詰まっています。
誰かに何かアイデアがあれば、それは素晴らしいことです。FWIW、このコードはすべて Jboss 5 で正常に動作したため、JBoss の問題かどうかはわかりません。

4

1 に答える 1