spring boot,如何在filter的init方法

时间:2017-03-17 07:02:41

标签: spring-boot

我的英语太差了。我希望你能知道我的意思。

我需要在我的过滤器的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。

这个问题困扰了我很长一段时间。请帮帮我。

1 个答案:

答案 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.propertiesapplication.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;
}