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

Spring Boot找不到URL重写。jar文件中的xml

左丘嘉言
2023-03-14

我正在使用带有嵌入式Tomcat的Spring Boot,而类UrlRewriteFilter找不到配置文件urlrewrite。xml,该类使用servletcontext。getResourceAsStream(this.confPath)和我在另一篇文章中读到,当包是jar时,该方法不起作用。有人有这个问题?

共有3个答案

边意
2023-03-14

我用的是带Spring靴的Tuckey过滤器。我在这个堆栈溢出问题(不是答案)中遵循了最初的问题实现。我还补充说

registrationBean.addInitParameter("confPath", "urlrewrite.xml");

设置URL重写的特定路径。xml文件。在项目中,我将文件放在src/main/webapp中。

这在使用“mvn spring boot:run”时有效,我认为它满足了在jar中运行的需要。在我的项目中,我构建了一个war文件,这也适用于此。

况谦
2023-03-14

下面的代码适用于我。

请使用以下依赖项:

         <dependency>
           <groupId>org.tuckey</groupId>
           <artifactId>urlrewritefilter</artifactId>
           <version>4.0.4</version>
         </dependency>

创建URL重写。资源文件夹中的xml:

 <?xml version="1.0" encoding="utf-8"?>
 <!DOCTYPE urlrewrite
    PUBLIC "-//tuckey.org//DTD UrlRewrite 3.0//EN"
    "http://www.tuckey.org/res/dtds/urlrewrite3.0.dtd">

<urlrewrite>
    <rule>
        <name>Domain Name Check</name>
        <condition name="host" operator="notequal">www.userdomain.com</condition>
        <from>^(.*)$</from>
        <to type="redirect">http://www.userdomain.com$1</to>
    </rule>
</urlrewrite>

在主ApplicationRunner中添加以下内容。爪哇:

@Bean
public FilterRegistrationBean tuckeyRegistrationBean() {
    final FilterRegistrationBean registrationBean = new FilterRegistrationBean();
    registrationBean.setFilter(new CustomURLRewriter());
    return registrationBean;
}

并创建CustomURLRewriter:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.core.io.ClassPathResource;
import org.tuckey.web.filters.urlrewrite.Conf;
import org.tuckey.web.filters.urlrewrite.UrlRewriteFilter;
import org.tuckey.web.filters.urlrewrite.UrlRewriter;
import javax.servlet.*;
import java.io.InputStream;

public class CustomURLRewriter extends UrlRewriteFilter {
private UrlRewriter urlRewriter;

@Autowired
Environment env;

@Override
public void loadUrlRewriter(FilterConfig filterConfig) throws ServletException {
    try {
        ClassPathResource classPathResource = new ClassPathResource("urlrewrite.xml");
        InputStream inputStream = classPathResource.getInputStream();
        Conf conf1 = new Conf(filterConfig.getServletContext(), inputStream, "urlrewrite.xml", "");
        urlRewriter = new UrlRewriter(conf1);
    } catch (Exception e) {
        throw new ServletException(e);
    }
}

@Override
public UrlRewriter getUrlRewriter(ServletRequest request, ServletResponse response, FilterChain chain) {
    return urlRewriter;
}

@Override
public void destroyUrlRewriter() {
    if(urlRewriter != null)
        urlRewriter.destroy();
}
}
濮俊美
2023-03-14

在博客文章中找到

import org.springframework.core.io.Resource;
import org.tuckey.web.filters.urlrewrite.Conf;
import org.tuckey.web.filters.urlrewrite.UrlRewriteFilter;

//Adding @Component Annotation to a Filter is enough to register the Filter, when you have no web.xml
@Component
public class MyUrlRewriteFilter extends UrlRewriteFilter {

    private static final String CONFIG_LOCATION = "classpath:/urlrewrite.xml";

    //Inject the Resource from the given location
    @Value(CONFIG_LOCATION)
    private Resource resource;

    //Override the loadUrlRewriter method, and write your own implementation
    @Override
    protected void loadUrlRewriter(FilterConfig filterConfig) throws ServletException {
        try {
            //Create a UrlRewrite Conf object with the injected resource
            Conf conf = new Conf(filterConfig.getServletContext(), resource.getInputStream(), resource.getFilename(), "@@yourOwnSystemId@@");
            checkConf(conf);
        } catch (IOException ex) {
            throw new ServletException("Unable to load URL rewrite configuration file from " + CONFIG_LOCATION, ex);
        }
    }
}
 类似资料:
  • 我已经尝试了几种方法(谷歌,堆栈溢出…)和几天解决以下错误没有成功。只有在运行应用程序时才会发生此错误。编译不受影响。 org.databene.commons。配置错误:未找到类:“org.databene.benerator.engine”。DefaultBeneratorFactory'位于org.databene.commons.ExceptionMapper.configurationE

  • 当我启动应用程序时,我得到一个错误,即找不到。 然后我把它添加到我的SpringBootApp中 并且找到,但没有找到。 存储库

  • 我在我支持的许多应用程序中实现了Flyway,它像梦一样工作。 但是,当我将应用程序部署到测试环境时,迁移就停止了。 经过一些调查,我发现当迁移被加载到jar文件中时,它们不是通过Flyway定位的,而是当它们没有被压缩时(比如当我在Eclipse中工作时,或者如果我将jar解压到类路径中),它会按预期工作。 由于应用程序的插件架构,我无法使用“默认”设置,因此我将Flyway对象设置为: 如果要

  • 我正在尝试将java项目构建为一个jar文件,它需要google凭据才能运行。 运行此命令时: 我收到这个错误: 我按如下方式存储凭据的路径: 我使用此方法从资源文件夹检索凭据: 我不明白我需要做什么来避免这个错误。任何帮助都将不胜感激。

  • 问题内容: 使用IntelliJ启动我的应用程序时,一切工作正常。 我懂了: 似乎在中找不到自动配置类。如何添加它,该文件的内容应该是什么? 问题答案: 我有同样的问题,只是解决了。 最初,我是使用生成胖子的,该胖子创建了一个名为的文件。与我尝试运行该文件时提到的问题相同。 我认为,因为它是Spring Boot应用程序,所以你需要使用它们的插件。我将包装更改为,spring-boot-maven