-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.yml
へserver.port=8080
を入れ経由して、あなたのフィルタでポートを取得し、あなたのフィルタに渡すことができ
私の必要はありません。 initメソッドでポートを取得したい(javax.servlet.Filter#init) – HowardLiu
@HowardLiu必要に応じてソリューションを変更しました。 – bekce
ありがとうございました。しかし、私は他のsolutioinが必要です。 'server.port'はapplication.yamlで指定するか、cammandで-Dを使用する必要があります。または、例外があります。 '' $ {server.port} "という値のプレースホルダ 'server.port'を解決できませんでした。私のフィルタは、他の人の基本コンポーネントです。私が他人にこのパラメータを与えるように頼むと、それは優雅ではありません。 – HowardLiu