0

参考:IIS7.5とApacheTomcat5.5を搭載したWindowsServer2008R2を実行しています。IISは、AJPコネクタバージョン1.3を介してTomcatと通信します。TomcatはSSL対応です。そのため、WebサイトはHTTPトラフィックとHTTPSトラフィックの両方に対して有効になっています。また、web.xmlファイルには、url-patternを介して特定のファイルにHTTPSトラフィックを強制するようにリダイレクトするセキュリティ制約があります。

そうは言っても、httpsをhttpにリダイレクトすることになっているサーブレットフィルターを作成しました。残念ながら、Tomcatサーバーを再起動してログインページに入力すると、次のエラーが発生します。

探しているリソースが削除されたか、名前が変更されたか、一時的に利用できなくなっています。

Eclipseでクラスを作成し、RedirectToHTTP.jarというJARファイルとしてエクスポートし、このファイルを、Tomcatインストールディレクトリではなく、アプリケーションのWEB-INF/libディレクトリに配置しました。

問題が何であるかわかりません。フィードバックをいただければ幸いです。ありがとうございました。

アップデート

コメントで推奨されたときに、ログファイルをチェックして、フィルターに関連するエラーを見つけました

-フィルタredirectFilterの開始中に例外が発生しました

java.lang.UnsupportedClassVersionError:myfilterpkg / RedirectToHTTPFilter:サポートされていないmajor.minorバージョン51.0。

フィルタをJRE1.7でコンパイルしました。Tomcatはより低いバージョンのJREを使用している可能性があると思います。それが問題でしょうか?

web.xmlファイルの関連データは次のとおりです。

<filter>
    <filter-name>UTF8Encoder</filter-name>
     <filter-class>com.remedy.arsys.support.UTF8EncodingFilter</filter-class>
     <init-param>
         <param-name>Param1</param-name>
         <param-value>0</param-value>
     </init-param>
</filter>

<filter>
    <filter-name>redirectFilter</filter-name>
    <filter-class>myfilterpkg.RedirectToHTTPFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>UTF8Encoder</filter-name>
    <servlet-name>*.jsp</servlet-name>
</filter-mapping>

<filter-mapping>
    <filter-name>redirectFilter</filter-name>
    <url-pattern>/index.jsp</url-pattern>
</filter-mapping>

Javaクラスは次のとおりです。

package myfilterpkg;

import java.io.IOException;  

import javax.servlet.Filter;  
import javax.servlet.FilterChain;  
import javax.servlet.FilterConfig;  
import javax.servlet.ServletException;  
import javax.servlet.ServletRequest;  
import javax.servlet.ServletResponse;  
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  
import javax.servlet.http.HttpSession; 

@SuppressWarnings("unused")
public class RedirectToHTTPFilter implements Filter {

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        if ((request instanceof HttpServletRequest) && (response instanceof HttpServletResponse)) {
            String redirectTarget = ((HttpServletRequest)request).getRequestURL().toString().replaceFirst("https", "http");

            if(request.isSecure()) {
                ((HttpServletResponse)response).sendRedirect(redirectTarget);
            }
            else {
                chain.doFilter(request, response);
            }
        }
    }

    @Override
    public void destroy() {
    }

    @Override
    public void init(FilterConfig arg0) throws ServletException {
    }
}
4

1 に答える 1

1

フィルタは、Tomcatサーバーが実際に実行されているランタイムのソースレベルでコンパイルする必要があります。そうしないと、クラスロード時に上記のエラーが発生します。

于 2012-08-30T15:07:36.740 に答える