Springboot打包war需要注意的问题

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;
    }

}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本文包括:1、Filter简介2、Filter是如何实现拦截的?3、Filter开发入门4、Filter的生命周期...
    廖少少阅读 7,362评论 3 56
  • 这部分主要是与Java Web和Web Service相关的面试题。 96、阐述Servlet和CGI的区别? 答...
    杂货铺老板阅读 1,429评论 0 10
  • 经典的Java面试题(第二部分),这部分主要是与Java Web和Web Service相关的面试题。 96、阐述...
    我是阿喵酱阅读 1,292评论 1 8
  • 时光虚度,岁月无痕 曾记得十岁那时的自己,是那么的多姿多彩。一到夏天就与三三两两的小伙伴随时冒着被父母被揍的风险去...
    安禹阳城阅读 184评论 0 0
  • 软弱的人,追求岁月静好,与世无争 坚强的人,追求生命不息,战斗不止 生命不息,战斗不止
    花小浪阅读 169评论 0 0