我的英语太差了。我希望你能知道我的意思。
我需要在我的过滤器的init方法中获取服务器端口。接下来是我的过滤器配置:
@Bean
public FilterRegistrationBean filterRegistrationBean() {
FilterRegistrationBean filter = new FilterRegistrationBean();
filter.setFilter(new Monitor());
filter.addUrlPatterns("*.json");
return filter;
}
接下来是获取tomcat服务器端口的方法:
public static Integer getPort() throws Exception {
MBeanServer server = MBeanServerFactory.findMBeanServer(null).get(0);
Set<ObjectName> names = server.queryNames(new ObjectName("*:type=Connector,*"), null);
for (ObjectName name : names) {
String protocol = server.getAttribute(name, "protocol").toString();
String scheme = server.getAttribute(name, "scheme").toString();
logger.debug("protocol={}, scheme={}", protocol, scheme);
if (protocol.toLowerCase().contains("http") && scheme.toLowerCase().contains("http")) {
return (Integer) server.getAttribute(name, "port");
}
}
return 0;
}
它在样本tomcat应用程序中运行良好。但是在spring boot应用程序中,它只是得到0。
这个问题困扰了我很长一段时间。请帮帮我。
答案 0 :(得分:0)
您可以通过ServletRequest.getServerPort()
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
int port = request.getServerPort();
System.out.println("serverPort:" +serverPort);
}
或者,将server.port=8080
放到application.properties
或application.yml
并将其传递给您的过滤器:
@Value("${server.port}")
private int port;
@Bean
public FilterRegistrationBean filterRegistrationBean() {
FilterRegistrationBean filter = new FilterRegistrationBean();
filter.setFilter(new Monitor(port));
filter.addUrlPatterns("*.json");
return filter;
}