springboot

Springboot打包war需要注意的问题

2019-04-28  本文已影响0人  Guncorpse

Sprinboot打包成jar包运行似乎没有什么问题,但是当需求让你不得不将Springboot项目打包成war扔到Tomcat中运行时,就需要注意以下问题:

1.Springboot内置的Tomcat中的Filter类与外部Tomcat中的Filter类写法不一致:
Springboot中内置Tomcat的Filter中init(), destroy()为默认方法继承后可以不重写这两个方法。
外部Tomcat中的Filter的init(), destroy()是抽象方法,你必须实现这两个方法,否则启动会报错。
解决:你的过滤器继承Filter类后要将init(), doFilter(), destroy()全部重写。

2. 通过@WebFilter声明的过滤器无法注入其他Spring组件(对象为null):
原因还未了解

解决:去掉@WebFilter和其他所有注解,通过配置类来手动创建Filter Bean

package com.guncorpse.skeleton.base.config;

import javax.servlet.Filter;

import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.filter.DelegatingFilterProxy;

import com.guncorpse.skeleton.base.filter.BaseSecurityFilter;

@Configuration
public class FilterConfig {
    
    @Bean
    public Filter baseSecurityFilter(){
        return new BaseSecurityFilter();
    }
    
    @Bean
    public FilterRegistrationBean<DelegatingFilterProxy> baseSecurityFilterRegistration() {
        FilterRegistrationBean<DelegatingFilterProxy> registration = new FilterRegistrationBean<DelegatingFilterProxy>();
        registration.setFilter(new DelegatingFilterProxy("baseSecurityFilter"));
        registration.addUrlPatterns("/*");
        registration.setName("baseSecurityFilter");
        registration.setOrder(1);
        return registration;
    }

}
上一篇下一篇

猜你喜欢

热点阅读