Web项目端口扩展及过滤

Web项目端口扩展及过滤

需求

已部署在内网环境下的项目,开放了外网映射。
现在希望将 资源访问与接口访问请求,分开进行过滤。

依赖包

	<!-- boot web 基础依赖 -->
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-web</artifactId>
	</dependency>
	<!-- boot tomcat 依赖 -->
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-tomcat</artifactId>
	</dependency>
	<!-- commons-lang3 工具包 -->
	<dependency>
		<groupId>org.apache.commons</groupId>
		<artifactId>commons-lang3</artifactId>
		<version>${commons-lang3.version}</version>
	</dependency>

端口添加

配置文件

	server.port=8081
	server.request=8082

组件类

import org.apache.catalina.connector.Connector;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory;
import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.ArrayList;
import java.util.List;
/**
 * tomcat 配置类
 */
@Configuration
public class TomcatConfig {

	@Value("${server.request}")
	private String additional;
	
	@Value("${server.port}")
	private String serverPort;


	@Bean
	public EmbeddedServletContainerFactory servletContainer() {
		TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory();
		Connector[] additionalConnectors = this.additionalConnector();
		if (additionalConnectors != null && additionalConnectors.length > 0) {
			tomcat.addAdditionalTomcatConnectors(additionalConnectors);
		}
		return tomcat;
	}

	@Bean// boot1.58以后
	public ServletWebServerFactory servletContainer() {
	 TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory();
		Connector[] additionalConnectors = this.additionalConnector();
		if (additionalConnectors != null && additionalConnectors.length > 0) {
			tomcat.addAdditionalTomcatConnectors(additionalConnectors);
		}
		return tomcat;
	}

	private Connector[] additionalConnector() {
		if (StringUtils.isBlank(this.additional)) {
			return null;
		}
		if (StringUtils.isBlank(this.serverPort)) {
			return null;
		}
		String[] ports = this.additional.split(",");
		List<Connector> result = new ArrayList<>();
		for (String port : ports) {
			if(serverPort.equals(port)) {
				continue;
			}
			Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
			connector.setScheme("http");
			connector.setPort(Integer.valueOf(port));
			result.add(connector);
		}
		return result.toArray(new Connector[] {});
	}
}

过滤器

在 webMvcConfig配置中添加过滤器。

	/**
	*需要过滤的url 也可以适用懒加载,
	*用静态代码快 static{} 从配置中读取
	*/
	public static String[] externalUrls= {
			"/userAccess",
			"/login"
	};

	/**
	*自定义过滤器配置类
	*/
    @Bean
    public FilterRegistrationBean PortFilter() {
        final FilterRegistrationBean registrationBean = new FilterRegistrationBean();
        Set<String>  exclusionsUrls = new HashSet<>();
        exclusionsUrls.addAll(Arrays.asList(externalUrls));
       	//自定义过滤器 PortFilter 将 区分的url、端口配置 
       	//port 与 serverport需要值校验,这里省略
        registrationBean.setFilter(new PortFilter(exclusionsUrls,additional,serverPort));
        //要拦截的域名,自定义配置。
        registrationBean.addUrlPatterns("/*");
        //过滤器顺序,按项目实际情况
        registrationBean.setOrder(2);
        return registrationBean;
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值