2017-03-17 15 views
-1

英語が貧弱です。私はあなたが私の言いたいことを知ることができれば幸いですspring boot、フィルタのinitメソッドでサーバーポートを取得する方法

私のフィルタのinitメソッドでサーバポートを取得する必要があります。これは、サンプル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; 
} 

@Bean 
public FilterRegistrationBean filterRegistrationBean() { 
    FilterRegistrationBean filter = new FilterRegistrationBean(); 
    filter.setFilter(new Monitor()); 
    filter.addUrlPatterns("*.json"); 
    return filter; 
} 

次のTomcatのサーバポートを取得するための私の方法は次のとおりです。次は私のフィルタ構成です。しかし、春のブートアプリケーションでは、それはちょうど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); 
} 

OR、あなたのapplication.propertiesまたはapplication.ymlserver.port=8080を入れ経由して、あなたのフィルタでポートを取得し、あなたのフィルタに渡すことができ

答えて

0

@Value("${server.port}") 
private int port; 

@Bean 
public FilterRegistrationBean filterRegistrationBean() { 
    FilterRegistrationBean filter = new FilterRegistrationBean(); 
    filter.setFilter(new Monitor(port)); 
    filter.addUrlPatterns("*.json"); 
    return filter; 
} 
+0

私の必要はありません。 initメソッドでポートを取得したい(javax.servlet.Filter#init) – HowardLiu

+0

@HowardLiu必要に応じてソリューションを変更しました。 – bekce

+0

ありがとうございました。しかし、私は他のsolutioinが必要です。 'server.port'はapplication.yamlで指定するか、cammandで-Dを使用する必要があります。または、例外があります。 '' $ {server.port} "という値のプレースホルダ 'server.port'を解決できませんでした。私のフィルタは、他の人の基本コンポーネントです。私が他人にこのパラメータを与えるように頼むと、それは優雅ではありません。 – HowardLiu

関連する問題