当前位置: 首页 > 知识库问答 >
问题:

Tomcat应用程序Web.xml自定义过滤器,给出资源已移动的错误;过滤器将https重定向到超文本传输协议

步兴德
2023-03-14

仅供参考:我运行的是Windows Server 2008 R2版,使用的是IIS 7.5和Apache Tomcat 5.5。IIS通过AJP连接器1.3版与Tomcat对话。Tomcat启用了SSL因此,该网站同时支持HTTP和HTTPS流量。我在web.xml文件中还有一个安全约束,通过url-pattern重定向以强制特定文件的HTTPS流量。

说了这么多,我已经创建了一个servlet过滤器,它应该将https重定向到http。不幸的是,当我重新启动tomcat服务器并输入登录页面时,我得到以下错误:

您要查找的资源已被删除、更改了名称或暂时不可用。

我在Eclipse中创建了这个类,并将其导出为名为RedirectToHTTP的JAR文件。jar,我将这个文件放在应用程序的WEB-INF/lib目录中,而不是Tomcat安装目录中。

我不知道问题出在哪里,我希望得到任何反馈。非常感谢。

使现代化

根据评论中的建议,我检查了日志文件,发现了与我的过滤器相关的错误

-启动过滤器redirectFilter时出现异常

java.lang.UnsupportedClassVersionError:myfilterpkg/RedirectToHTTPFilter:不支持的主要版本。次要版本51.0。

我用 JRE 1.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 {
    }
}

共有1个答案

孙书
2023-03-14

筛选器必须使用 tomcat 服务器实际运行的运行时的源代码级别进行编译。否则,在类加载时会出现上述错误。

 类似资料:
  • 演示在网关追加一个header public class CustomFilter implements GlobalFilter, Ordered { @Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { // 演示在网关追加heade

  • SOFARPC 提供了一套良好的可扩展性机制,为各个模块提供 SPI 的能力。 SOFARPC 对请求与响应的过滤链处理方式是通过多个过滤器 Filter 来进行具体的拦截处理,该部分可由用户自定义 Filter 扩展,自定义 Filter 的执行顺序在内置 Filter 之后。具体方式如下: Bolt Filter 新建自定义 Filter 。 public class CustomFilter

  • 我想使用此方法启用CORS Tomcat 8(自定义过滤器)Tomcat CORS过滤器 我困惑的步骤,使自定义过滤器被称为web.xml. 如何设置. java文件?这个文件的目录在哪里(SimpleCORSFilter)?

  • 问题内容: 我试图在Log4J2中实现和配置自定义过滤器- 基于ThresholdFilter,但打算做更多。我已经看到了有关自定义追加程序的主题,这些主题遵循相同的插件注释语法,但是还没有找到有关自定义拟合程序的主题。 MyCustomFilter.java (基于ThresholdFilter) log4j2.xml LoggingRunner.java 配置语法似乎与Apache文档中的语法

  • 本文向大家介绍Django 自定义过滤器,包括了Django 自定义过滤器的使用技巧和注意事项,需要的朋友参考一下 示例 过滤器允许您将函数应用于变量。此函数可以使用0或1参数。语法如下: 过滤器可以链接在一起,因此非常有效: 如果将其翻译成python,上面的代码行将给出以下内容: 在此示例中,我们将编写一个verbose_name适用于模型(实例或类)或QuerySet的自定义过滤器。它将返回

  • Dorado支持在Client或Server端创建自定义的过滤器并指定过滤器的优先级生成过滤器链路。 Dorado支持全局生效的Filter和单个配置生效的Filter,具体使用方式见下面说明。 1.过滤器接口定义 package com.meituan.dorado.rpc.handler.filter; /** * 过滤器接口, 可自行实现 * * 全局生效Filter,通过SPI配置