我已为我的项目配置了自签名证书,并配置为将不安全的http重定向到https。我还想将请求重定向到没有前缀的主机到主机,例如当我们向https://google.com发出请求时,它会自动重定向到https://www.google.com。>
现在,为了这样做,我发现了一个名为UrlRewriteFilter的库,但是该库具有XML可用的配置。我试图将XML配置转换为Java等效方法,但是由于找不到Java等效方法而没有运气。我试图通过参考this Baeldung resource来转换配置。以下是基于XML的配置。我正在将Spring Boot 1.5.19与嵌入式underwow服务器一起使用。请帮忙。
Maven依赖项:
www.
web.xml
<dependency>
<groupId>org.tuckey</groupId>
<artifactId>urlrewritefilter</artifactId>
<version>4.0.4</version>
</dependency>
urlrewrite.xml
<filter>
<filter-name>UrlRewriteFilter</filter-name>
<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>UrlRewriteFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
答案 0 :(得分:0)
我必须在这里回答我自己的问题,因为我发现该库没有Java等效的配置,因为它上一次维护是在2012年。解决方案是Java和XML配置的混合。如果使用反向代理服务器,则可以避免此配置。但是,我想避免这种情况,而是让单个应用程序服务器来做各种事情。这样就可以了:
配置文件:
@Configuration
public class UrlRewriteConfig extends UrlRewriteFilter {
private UrlRewriter urlRewriter;
@Bean
public FilterRegistrationBean tuckeyRegistrationBean() {
final FilterRegistrationBean registrationBean = new FilterRegistrationBean();
registrationBean.setFilter(new UrlRewriteConfig());
return registrationBean;
}
@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();
}
}
项目结构:
还有urlrewrite.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>SEO Redirect and Secure Channel</name>
<condition name="host" operator="equal">^example.com</condition>
<from>^(.*)$</from>
<to type="permanent-redirect">https://www.example.com$1</to>
</rule>
</urlrewrite>
一个非常重要的要点,是我不得不删除Undertow Server配置中不安全的http到https重定向,因为它引发了错误-“ TOO MANY REDIRECTS”。因此,我要做的是我保持了两个端口的打开状态-80和443用于不安全的连接,并且tuckey配置进行了各种重定向,从http到https和从非www到www。希望对您有所帮助。