I just started JAVA EE development with WildFly 8.2. My first problem is how to change the default port 8080 to something else?
I found many xml files containing below line.
<socket-binding name="http" port="${jboss.http.port:8080}"/>
but I guess I don’t have to change all of them?!
asked Jan 13, 2015 at 12:29
dermoritzdermoritz
12.2k21 gold badges97 silver badges175 bronze badges
2
In your standalone.xml file, look for this element:
<socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">
The port-offset attribute lets you modify all the ports wildfly uses, by adding the number you specify.
For example, the default value is 0
, which means that http port will be 8080
, remoting 4447
, etc.
If you use ${jboss.socket.binding.port-offset:100}
, http port will be 8180 (8080+100)
, remoting 4547 (4447+100)
, etc.
So you need to change the offset, nothing else.
EDIT: You can also do this by using a system property at startup, check http://www.mastertheboss.com/jboss-server/jboss-configuration/configuring-port-offset-on-jboss-as-wildfly
acm
2,0283 gold badges14 silver badges34 bronze badges
answered Jan 13, 2015 at 13:05
mendietamendieta
3,4402 gold badges19 silver badges23 bronze badges
1
An alternative would be to start the WildFly instance by directly specifying the port in the startup command.
Windows:
standalone.bat -Djboss.http.port=1234
*nix:
standalone.sh -Djboss.http.port=1234
This would start the port for http-remoting on 1234
. Some context here.
answered Apr 10, 2017 at 9:35
TT.TT.
15.6k6 gold badges46 silver badges86 bronze badges
2
Don’t forget to also offset your debug port if you are running in debug mode. This should be in the standalone.conf
answered Mar 17, 2016 at 4:04
0
If youre running on
Linux`, try this command at the start
./standalone.sh -b 0.0.0.0 -Djboss.socket.binding.port-offset=1000
If youre working on
Windows` environment,
standalone.bat -Djboss.socket.binding.port-offset=1000
answered Aug 16, 2018 at 4:43
Du-LacosteDu-Lacoste
10.7k2 gold badges64 silver badges50 bronze badges
/socket-binding-group=standard-sockets:write-attribute(name=port-offset,value=100)
You may need to start the cli in offline mode if there is another wildfly running.
answered Dec 24, 2021 at 13:46
grigouillegrigouille
4563 silver badges12 bronze badges
This tutorial discusses how to configure the default ports for WildFly and JBoss EAP through the various server releases. We will learn how to change a single port definition, such as the default 8080 port and how to shift all ports using a port offset.
WildFly / JBoss EAP default ports
JBoss EAP and WildFly use Socket Binding groups to configure the network ports, which are actively listening for incoming connections. In Standalone mode, there is a single Socket Binding Group which defines all port settings:
<socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}"> <socket-binding name="management-http" interface="management" port="${jboss.management.http.port:9990}"/> <socket-binding name="management-https" interface="management" port="${jboss.management.https.port:9993}"/> <socket-binding name="ajp" port="${jboss.ajp.port:8009}"/> <socket-binding name="http" port="${jboss.http.port:8080}"/> <socket-binding name="https" port="${jboss.https.port:8443}"/> <socket-binding name="txn-recovery-environment" port="4712"/> <socket-binding name="txn-status-manager" port="4713"/> <outbound-socket-binding name="mail-smtp"> <remote-destination host="localhost" port="25"/> </outbound-socket-binding> </socket-binding-group>
For example, if you want to change the default 8080 port for the HTTP Server, you can pass the jboss.http.port attribute as System Property:
$ ./standalone.sh -Djboss.http.port=8090
Most of the times, it is preferable to define an offset for all ports. You can do that through the jboss.socket.binding.portoffset attribute which shifts all port definitions of a fixed number. For example, to declare an offset of 100, start the application server as follows:
$ ./standalone.sh -Djboss.socket.binding.port-offset=100
The corresponding interfaces used to bind the ports are defined by the default-interface attribute. Here are the default interfaces available:
<interfaces> <interface name="management"> <inet-address value="${jboss.bind.address.management:127.0.0.1}"/> </interface> <interface name="public"> <inet-address value="${jboss.bind.address:127.0.0.1}"/> </interface> </interfaces>
When you are running in Domain mode, there are multiple Socket Binding Groups which you can assign to a Server group:
<server-group name="main-server-group" profile="full-ha"> <socket-binding-group ref="full-ha-sockets"/> </server-group>
In the above example, the main-server-group uses the full-ha-sockets configuration:
<socket-binding-group name="full-ha-sockets" default-interface="public"> <socket-binding name="ajp" port="${jboss.ajp.port:8009}"/> <socket-binding name="http" port="${jboss.http.port:8080}"/> <socket-binding name="https" port="${jboss.https.port:8443}"/> <socket-binding name="iiop" interface="unsecure" port="3528"/> <socket-binding name="iiop-ssl" interface="unsecure" port="3529"/> <socket-binding name="jgroups-mping" interface="private" port="0" multicast-address="${jboss.default.multicast.address:230.0.0.4}" multicast-port="45700"/> <socket-binding name="jgroups-tcp" interface="private" port="7600"/> <socket-binding name="jgroups-tcp-fd" interface="private" port="57600"/> <socket-binding name="jgroups-udp" interface="private" port="55200" multicast-address="${jboss.default.multicast.address:230.0.0.4}" multicast-port="45688"/> <socket-binding name="jgroups-udp-fd" interface="private" port="54200"/> <socket-binding name="modcluster" port="0" multicast-address="224.0.1.105" multicast-port="23364"/> <socket-binding name="txn-recovery-environment" port="4712"/> <socket-binding name="txn-status-manager" port="4713"/> <outbound-socket-binding name="mail-smtp"> <remote-destination host="localhost" port="25"/> </outbound-socket-binding> </socket-binding-group>
Please notice that WildFly uses the port 9990 for all management interfaces (Web interface and CLI). On the other habd, EAP 6/ AS 7 uses the native port 9999 to communicate over the CLI.
How to find the JBoss Port number
If you cannot access the server configuration, a simple way to find which port the application server is using is the netstat command.
Firstly, check which is the PID of the application server:
ps -ef | grep jboss
Then, use the netstat command with the following set of options:
netstat -tulpn | grep <pid>
In this example, the application server is using the ports 8080, 9990 and 8443:
JBoss AS 5 Port settings
The JBoss AS port configuration file is located in confbindingservice.beansMETA-INFbindings-jboss-beans.xml. This file gathers port configuration information about both AS services and the Web server services.
Actually the release Community version JBoss AS 6.x of the application server provides a richer abstraction by removing port definitions also from the Web server configuration file (server.xml) which now contains an application server property
<Connector protocol="HTTP/1.1" port="${jboss.web.http.port}" address="${jboss.bind.address}" redirectPort="${jboss.web.https.port}" /> <Connector protocol="AJP/1.3" port="${jboss.web.ajp.port}" address="${jboss.bind.address}" redirectPort="${jboss.web.https.port}" />
The single service ports are properties of the StandardBindings Bean.
<bean name="StandardBindings" class="java.util.HashSet"> <constructor> <parameter class="java.util.Collection"> <set elementClass="org.jboss.services.binding.ServiceBindingMetadata"> <!-- Naming Service --> <bean class="org.jboss.services.binding.ServiceBindingMetadata"> <property name="serviceName">jboss:service=Naming</property> <property name="bindingName">Port</property> <property name="port">1099</property> <property name="description">The listening socket for the Naming service</property> </bean> . . . . . . . . . . . . </set> </parameter> </constructor> </bean>
Supposing we have bound JBoss AS to the IP Address 10.2.20.156, here’s the list of ports engaged by the application server:
Port Description ------------------------------------------------- 1090 RMI/JRMP for Remote JMX 1091 RMI server socket 1098 Naming Service - RMI requests from client proxies 1099 Naming Service - Main port 3873 EJB3 Remoting Connector 4446 JBoss Remoting Connector - Unified Invoker 4712 JBossTS Recovery Manager 4713 JBossTS Transaction Status Manager 4714 JBossTS - used to create a unique process id 5445 HornetQ 5455 Socket for HornetQ throughput connection factory 5500 Non-SSL Remoting 5501 SSL Remoting 8009 AJP Port 8080 HTTP Port 8083 Dynamic class and resource loading
Clustered servers will additionally open the following ports:
1100 HA JNDI Service 1101 HA JNDI Service 3528 Corba IIOP Service
The Service Binding Manager
The Service Binding Manager co-ordinates which ports the JBoss Application Server instance listens on when it starts up and the Administration Console provides a mechanism for configuring this service to change which ports get used.
The Service Binding Manager can be used to change the default port sets, without changing the single service ports.
Out of the box, the JBoss Application Server 5 ships with four port sets:
* ports-default: The standard ports, for instance JBoss HTTP is on 8080. * ports-01: The standard ports incremented by 100. For example, HTTP is on 8180 * ports-02: The standard ports incremented by 200. For example, HTTP is on 8280 * ports-03: The standard ports incremented by 300. For example, HTTP is on 8380
In order to change the port set you can edit the file bindings-jboss-beans.xml and set for example the ports-01
<parameter>${jboss.service.binding.set:ports-01}</parameter>
You can as well change the Service Binding ports from the start-up script of the application server. For example:
run -Djboss.service.binding.set=ports-01
This is pretty useful if you don’t have to maintain a separate copy of the all folder if you want to, say, start up multiple instances of JBoss running as a cluster.
You can change Port binding by means of the JBoss AS admin console: reach the Service Binding Manager thorough the path:
<machine> : JBossAS Servers : JBoss AS 6 (default) : Service Binding Manager.
Next go to its Configuration tab and for the Active Binding Set Name property enter the name of the new port set you wish the JBoss Application Server instance to use and hit the SAVE button at the bottom of the page.
Select the Service Binding Sets folder from the navigation, hit the Add a new resource button on the main panel and enter in the necessary information.
Once you have updated the configuration for the Service Binding Manager, the JBoss Application Server instance must be restarted for those changes to take effect.
See the following article for more details about the error “java.net.BindException: Address already in use: JVM_Bind ” : Solving java.net.BindException: Address already in use: JVM_Bind
Post Views:
2,441
This is an article about JBoss Wildly Change Port Configuration. JBoss WildFly runtime manages the applications deployed on its server. It used to be called as JBoss application server. In this article, setup of WildFly Change Port Configuration is presented and discussed.
1. Introduction
A JBoss WildFly instance can be deployed on the standalone server. The default port for the standalone server is 8080. The port can be changed in the Jboss wildfly configuration
2. JBoss Wildfly Change Port
2.1 Prerequisites
Java 7 or 8 is required on the machine where JBoss Wildfly is running. In addition, JBoss Wildfly need to be installed after the Java is installed.
2.2 Download
You can download Java 7 and Java 8 from the links Oracle site1 and site2 respectively. JBoss Wildfly can be downloaded from this link.
2.3 Setup
JDK environment variable can be set in JBoss Wildfly standalone.conf. This configuration file is in the bin folder. For example, The script below shows the environmental variables set for JBoss Wildfly.
environmental variables
JAVA_HOME=”/jboss/jdk1.8.0_73″ export JAVA_HOME PATH=$JAVA_HOME/bin:$PATH export PATH JBOSS_HOME=”/jboss/wildfly-10.1.0.Final” JAVA_OPTS= -server -Xms64m -Xmx512m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true export JAVA_OPTS
2.4 Running the JBoss Wildfly
Wildfly server can be started with this command from wildfly-16.0.0.Final/bin:start command
./standalone.sh
After the wildfly server starts and you can check in the browser using the url : http://localhost:8080/
A sample war provided below in the download section can be deployed on to the server using the admin console. You can check the war deployed by using the link http://localhost:8080/sample
2.5 Port Change Configuration
The port change can be done in the socket binding element of the standalone.xml configuration file.standalone.xml port configuration
<socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}"> <socket-binding name="management-http" interface="management" port="${jboss.management.http.port:9990}"/> <socket-binding name="management-https" interface="management" port="${jboss.management.https.port:9993}"/> <socket-binding name="ajp" port="${jboss.ajp.port:8009}"/> <socket-binding name="http" port="${jboss.http.port:8080}"/> <socket-binding name="https" port="${jboss.https.port:8443}"/> <socket-binding name="txn-recovery-environment" port="4712"/> <socket-binding name="txn-status-manager" port="4713"/> <outbound-socket-binding name="mail-smtp"> <remote-destination host="localhost" port="25"/> </outbound-socket-binding> </socket-binding-group>
The http port number change should not conflict with https, ajp, management-https and other protocols. You can pick the port number 8443 + 20 = 8463. 8443 is the biggest port in the range 8000 – 9000. The changed element in the file is shown below.standalone.xml port changed configuration
<socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}"> <socket-binding name="management-http" interface="management" port="${jboss.management.http.port:9990}"/> <socket-binding name="management-https" interface="management" port="${jboss.management.https.port:9993}"/> <socket-binding name="ajp" port="${jboss.ajp.port:8009}"/> <socket-binding name="http" port="${jboss.http.port:8463}"/> <socket-binding name="https" port="${jboss.https.port:8443}"/> <socket-binding name="txn-recovery-environment" port="4712"/> <socket-binding name="txn-status-manager" port="4713"/> <outbound-socket-binding name="mail-smtp"> <remote-destination host="localhost" port="25"/> </outbound-socket-binding> </socket-binding-group>
The Wildfly server is restarted and the link to the deployed sample war will be http://localhost:8463/sample
3 Download The Source Code
Sample war file can be used for deployment on JBoss WildFly Server
Содержание
- 1 Настройка
- 1.1 Из командной строки
- 1.1.1 Настройка PayControl
- 1.1.2 Добавление источников данных (разные СУБД)
- 1.2 Удаление настроек по умолчанию
- 1.3 Добавление сертификатов корпоративных УЦ
- 1.4 Включение и конфигурирование HTTPS
- 1.4.1 Добавление сертификата
- 1.4.2 Отключение HTTP порта (8080)
- 1.4.3 Переключение публикации схемы на HTTPS
- 1.4.4 Указание определённых стандартов защиты и алгоритмов
- 1.4.5 Включение дополнительных заголовков
- 1.5 Изменение номера порта
- 1.5.1 Изменение порта PCS
- 1.5.2 Изменение порта PCIS Internal
- 1.5.3 Изменение порта PCIS External
- 1.6 Валидация подключения
- 1.6.1 PostgreSQL
- 1.6.2 Oracle
- 1.6.3 MS SQL
- 1.1 Из командной строки
- 2 Журналирование
- 2.1 Доступ к данным журнала
- 2.2 Включение журналирования SOAP-вызовов
- 2.3 Направление логов Wildfly в Kafka
- 2.3.1 Модули
- 2.3.1.1 org.apache.kafka.clients
- 2.3.1.2 org.apache.kafka.log4jappender
- 2.3.1.3 org.apache.log4j
- 2.3.1.4 org.jboss.as.standalone
- 2.3.2 Хэндлеры
- 2.3.2.1 kafka
- 2.3.2.2 async-kafka-wrapper
- 2.3.2.3 Включение хэндлера
- 2.3.1 Модули
- 3 Проблемы и способы их устранения
- 3.1 Очень медленный старт через standalone.sh (каждый этап скрипта запуска — с большими задержками). Система отправляет сигнал на остановку сервиса
- 3.2 Не происходит «биндинг» IP-адреса адаптера
- 3.3 Частое появление WARNING в логе
- 3.4 INFO: Disabling contextual LOB creation as createClob() method threw error
- 3.5 Wildfly не стартует как служба и нет логов
Настройка
Из командной строки
Подключение к консоли:
sudo /opt/wildfly/bin/jboss-cli.sh --connect
Выполнение команд в неинтерактивном режиме:
sudo /opt/wildfly/bin/jboss-cli.sh --connect --commands=ls deployment
Настройка PayControl
Удаление настроек по умолчанию:
data-source remove --name=ExampleDS /subsystem=ee/service=default-bindings:remove() reload /subsystem=datasources/jdbc-driver=h2:remove /subsystem=undertow/server=default-server/host=default-host/location=/:remove() /subsystem=undertow/configuration=handler:remove()
Добавление драйвера (postgresql) и источников данных:
module add --name=org.postgresql --resources=/opt/paycontrol/postgresql-42.2.5.jar --dependencies=javax.api,javax.transaction.api,javax.servlet.api /subsystem=datasources/jdbc-driver=postgres:add(driver-name="postgres",driver-module-name="org.postgresql",driver-class-name=org.postgresql.Driver) data-source add --jndi-name=java:jboss/datasources/PayControlDS --name=PayControlDS --connection-url=jdbc:postgresql://localhost:5432/pcs --driver-name=postgres --user-name=pcuser --password=XXXXXXXX data-source add --jndi-name=java:jboss/datasources/PayControlISDS --name=PayControlISDS --connection-url=jdbc:postgresql://localhost:5432/pcis --driver-name=postgres --user-name=pcuser --password=XXXXXXXX
Установка wsdl-host
/subsystem=webservices:write-attribute(name=wsdl-host,value=docker.loc)
Добавление источников данных (разные СУБД)
Datasource | Connection URL |
---|---|
IBM DB2 | jdbc:db2://SERVER_NAME:PORT/DATABASE_NAME |
MariaDB | jdbc:mariadb://SERVER_NAME:PORT/DATABASE_NAME |
Microsoft SQL Server | jdbc:sqlserver://SERVER_NAME:PORT;DatabaseName=DATABASE_NAME |
MySQL | jdbc:mysql://SERVER_NAME:PORT/DATABASE_NAME |
Oracle | jdbc:oracle:thin:@SERVER_NAME:PORT:ORACLE_SID |
PostgreSQL | jdbc:postgresql://SERVER_NAME:PORT/DATABASE_NAME |
Sybase | jdbc:sybase:Tds:SERVER_NAME:PORT/DATABASE_NAME |
Удаление настроек по умолчанию
При конфигурировании Wildfly можно (при переводе системы в промышленную эксплуатацию — рекомендуется) удалить пример источника данных и страницу-приветствие. Для этого в файле standalone.xml необходимо убрать (либо закомментировать) следующие объекты:
<datasource jndi-name="java:jboss/datasources/ExampleDS" pool-name="ExampleDS" enabled="true" use-java-context="true"> <connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE</connection-url> <driver>h2</driver> <security> <user-name>sa</user-name> <password>sa</password> </security> </datasource>
<driver name="h2" module="com.h2database.h2"> <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class> </driver>
<default-bindings context-service="java:jboss/ee/concurrency/context/default" datasource="java:jboss/datasources/ExampleDS" managed-executor-service="java:jboss/ee/concurrency/executor/default" managed-scheduled-executor-service="java:jboss/ee/concurrency/scheduler/default" managed-thread-factory="java:jboss/ee/concurrency/factory/default"/>
<location name="/" handler="welcome-content"/>
<handlers> <file name="welcome-content" path="${jboss.home.dir}/welcome-content"/> </handlers>
Добавление сертификатов корпоративных УЦ
java keytool – с его помощью установить корневой сертификат в keystore. Если есть промежуточные, то их тоже.
java keystore password по умолчанию – “changeit”.
Примеры инструкций:
- https://docs.microsoft.com/ru-ru/java/azure/java-sdk-add-certificate-ca-store?view=azure-java-stable
- https://www.ibm.com/support/knowledgecenter/en/SSFUEU_6.2.1/com.ibm.swg.ba.cognos.administrators_guide.6.2.1.doc/t_shi_import_the_root_certificate_for_java.html
Как минимум в CN сертификата должен быть адрес, по которому происходит обращение к серверу (DNS или IP). Если этого будет недостаточно, тогда добавить в SAN сертификата.
Включение и конфигурирование HTTPS
Добавление сертификата
Для добавления/обновления сертификата необходимо выполнить следующие действия:
- Составить цепочку сертификатов.
Из файлов сертификатов в формате PEM (Base64) составить цепочку путём соединения в новом файле с расширением crt, например fullchain.crt. Для этого в новый файл с помощью текстового редактора нужно добавить сертификат корневого УЦ, промежуточных, и собственно сертификат сервера. - Создать контейнер формата pkcs12:
openssl pkcs12 -export -in fullchain.crt -inkey private_key.key -out keycontainer.p12
при экспорте следует задать пароль <password> для приватного ключа.
- Создать JKS-контейнер из PKCS12:
keytool -importkeystore -srckeystore keycontainer.p12 -srcstoretype PKCS12 -destkeystore <container-name>.jks -deststoretype JKS
при импорте указываем <password>, при экспорте указываем пароль к контейнеру.
- Скопировать <container-name>.jks например в /opt/wildfly/standalone/configuration/ (для Linux), либо в C:wildflystandaloneconfiguration (для Windows).
- Имя файла-контейнера (относительный путь от директории
configuration
) и пароли указать в файле /opt/wildfly/standalone/configuration/standalone.xml (для Linux), либо в C:wildflystandaloneconfigurationstandalone.xml (для Windows), для WildFly 25 и выше, :<tls> <key-stores> <key-store name="applicationKS"> <credential-reference clear-text="ПАРОЛЬ К КОНТЕЙНЕРУ"/> <implementation type="JKS"/> <file path="ИМЯ ФАЙЛА-КОНТЕЙНЕРА.jks" relative-to="jboss.server.config.dir"/> </key-store> </key-stores> <key-managers> <key-manager name="applicationKM" key-store="applicationKS" generate-self-signed-certificate-host="localhost"> <credential-reference clear-text="ПАРОЛЬ К ПРИВАТНОМУ КЛЮЧУ"/> </key-manager> </key-managers> <server-ssl-contexts> <server-ssl-context name="applicationSSC" key-manager="applicationKM"/> </server-ssl-contexts> </tls>
До версии 25, в объекте keystore (если АЛИАС не был задан, по умолчанию устанавливается значение «1»):
<security-realm name="ApplicationRealm"> <server-identities> <ssl> <keystore path="ИМЯ ФАЙЛА-КОНТЕЙНЕРА.jks" relative-to="jboss.server.config.dir" keystore-password="ПАРОЛЬ К КОНТЕЙНЕРУ" alias="АЛИАС" key-password="ПАРОЛЬ К ПРИВАТНОМУ КЛЮЧУ" generate-self-signed-certificate-host="localhost"/> </ssl> </server-identities>
- Перезапустить сервис WildFly.
- Проверить подключение:
openssl s_client -connect <server-name>:8443
Verify Result должен быть 0.
Отключение HTTP порта (8080)
|
Предупреждение! Приведённый ниже порядок действий применим для приложений, не публикующих WSDL-схему. Для приложений с WSDL потребуется дополнительная донастройка. |
Для того, чтобы на сервере PCIS External отключить доступ к REST-интерфейсу по порту 8080 необходимо в файле /opt/wildfly/standalone/configuration/standalone.xml (для Linux), либо в C:wildflystandaloneconfigurationstandalone.xml (для Windows) (перед этим лучше сделать его резервную копию) в блоке <server name="default-server">
удалить строку
<http-listener name="default" socket-binding="http" redirect-socket="https" enable-http2="true"/>
В блоке <socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">
удалить строку:
<socket-binding name="http" port="${jboss.http.port:8080}"/>
Изменить параметр <http-connector name="http-remoting-connector" connector-ref="default" security-realm="ApplicationRealm"/>
следующим образом (изменить значение connector-ref
с default
на https
):
<http-connector name="http-remoting-connector" connector-ref="https" security-realm="ApplicationRealm"/>
Переключение публикации схемы на HTTPS
Для того, чтобы, располагающаяся в WSDL, ссылка на схему была также корректна, необходимо в <subsystem xmlns="urn:jboss:domain:webservices:2.0">
добавить (заменив значения wsdl-host и, при необходимости, wsdl-port и wsdl-secure-port на необходимые) следующее:
<wsdl-host>yoursite.com</wsdl-host> <wsdl-port>8080</wsdl-port> <wsdl-secure-port>8443</wsdl-secure-port> <wsdl-uri-scheme>https</wsdl-uri-scheme>
Пример результата:
<subsystem xmlns="urn:jboss:domain:webservices:2.0"> <wsdl-host>paycontrol.org</wsdl-host> <wsdl-port>8080</wsdl-port> <wsdl-secure-port>8443</wsdl-secure-port> <wsdl-uri-scheme>https</wsdl-uri-scheme> <endpoint-config name="Standard-Endpoint-Config"/> <endpoint-config name="Recording-Endpoint-Config"> <pre-handler-chain name="recording-handlers" protocol-bindings="##SOAP11_HTTP ##SOAP11_HTTP_MTOM ##SOAP12_HTTP ##SOAP12_HTTP_MTOM"> <handler name="RecordingHandler" class="org.jboss.ws.common.invocation.RecordingServerHandler"/> </pre-handler-chain> </endpoint-config> <client-config name="Standard-Client-Config"/> </subsystem>
Указание определённых стандартов защиты и алгоритмов
Для выбора стандарта защиты HTTPS, только, например, TLS 1.2, нужно в объект https-listener объекта <subsystem xmlns=»urn:jboss:domain:undertow:X.X»> добавить, enabled-protocols=»TLSv1.2″.
Для выбора определённых криптографических алгоритмов, необходимо их указать в объекте https-listener объекта <subsystem xmlns=»urn:jboss:domain:undertow:X.X»>. Например, для запрета режимов работы без использования алгоритмов Диффи-Хеллмана, нужно добавить enabled-cipher-suites=»ALL:!kRSA».
Пример:
<subsystem xmlns="urn:jboss:domain:undertow:1.2"> <server name="default-server"> <https-listener name="https" socket-binding="https" security-realm="ApplicationRealm" enable-http2="true" enabled-cipher-suites="ALL:!kRSA" enabled-protocols="TLSv1.2"/> </server> </subsystem>
https://security.stackexchange.com/questions/145855/how-to-enforce-perfect-forward-secrecy-using-jvm-properties
https://www.openssl.org/docs/manmaster/man1/ciphers.html
Включение дополнительных заголовков
Для включения дополнительных HTTP заголовков необходимо в файл
- Linux:
- /opt/wildfly/standalone/configuration/standalone.xml
- Windows:
- C:wildflystandaloneconfigurationstandalone.xml
- добавить фильтры в раздел <subsystem xmlns=»urn:jboss:domain:undertow:X.X»> добавив блок (при его отсутствии)
<filters></filters>
следующего содержания:<filters> <response-header name="transport-security" header-name="Strict-Transport-Security" header-value="max-age=31536000"/> <response-header name="x-frame-options" header-name="X-Frame-Options" header-value="DENY"/> <response-header name="x-content-type-options" header-name="X-Content-Type-Options" header-value="nosniff"/> <response-header name="Content-Security-Policy" header-name="Content-Security-Policy" header-value="default-src 'self'"/> </filters>
- добавить ссылки на эти фильтры в раздел <subsystem xmlns=»urn:jboss:domain:undertow:X.X»> в <server name=»default-server»> в <host name=»default-host» alias=»localhost»> включив следующие строки:
<filter-ref name="transport-security"/> <filter-ref name="x-frame-options"/> <filter-ref name="x-content-type-options"/> <filter-ref name="Content-Security-Policy"/>
Пример:
<subsystem xmlns="urn:jboss:domain:undertow:11.0" default-server="default-server" default-virtual-host="default-host" default-servlet-container="default" default-security-domain="other"> <buffer-cache name="default"/> <server name="default-server"> <http-listener name="default" socket-binding="http" redirect-socket="https" enable-http2="true"/> <https-listener name="https" socket-binding="https" security-realm="ApplicationRealm" enable-http2="true" enabled-cipher-suites="ALL:!kRSA" enabled-protocols="TLSv1.2"/> <host name="default-host" alias="localhost"> <http-invoker security-realm="ApplicationRealm"/> <filter-ref name="transport-security"/> <filter-ref name="x-frame-options"/> <filter-ref name="x-content-type-options"/> <filter-ref name="Content-Security-Policy"/> </host> </server> <servlet-container name="default"> <jsp-config/> <websockets/> </servlet-container> <filters> <response-header name="transport-security" header-name="Strict-Transport-Security" header-value="max-age=31536000"/> <response-header name="x-frame-options" header-name="X-Frame-Options" header-value="DENY"/> <response-header name="x-content-type-options" header-name="X-Content-Type-Options" header-value="nosniff"/> <response-header name="Content-Security-Policy" header-name="Content-Security-Policy" header-value="default-src 'self'"/> </filters> </subsystem>
Изменение номера порта
Предупреждение! ОС Linux не позволяет сервисам работающим не от имени root использовать порты с номерами ниже 1024. Для использования портов ниже 1024 необходимо выполнять трансляцию, например с помощью netfilter (iptables/firewalld). |
Для изменения номера порта необходимо в файле /opt/wildfly/standalone/configuration/standalone.xml (Linux) или в C:wildflystandaloneconfigurationstandalone.xml (Windows), в блоке
<socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">
в нужном (для http, либо https) параметре
<socket-binding name="http" port="${jboss.http.port:8080}"/> <socket-binding name="https" port="${jboss.https.port:8443}"/>
изменить номер используемого порта.
После изменения номера порта, службу WildFly необходимо перезапустить.
При использовании «сервером» стандартных портов (80 для HTTP или 443 для HTTPS), при установке параметров настроек «клиента» для подключения к «серверу», номер порта в адресе дополнительно указывать не рекомендуется во избежании проблем, т.к. в этих случаях, согласно RFC2616 используется порт по умолчанию. При дополнительном указании в адресе порта по умолчанию бывали случаи возникновения проблем подключения.
Приведённые ниже примеры описаны для протокола HTTP. При использовании HTTPS, необходимо также скорректировать название используемого протокола в адресе подключения.
Изменение порта PCS
При изменении порта для подключения к PCS, необходимо:
- установить новый порт для обращения к PC в настройках прикладной системы;
- изменить номер порта в настройках PCIS External.
Для изменения номера порта для обращения к PCS, в настройках PCIS External в файле /opt/wildfly/bin/standalone.conf (Linux) или C:optwildflybinstandalone.conf.bat (Windows), в строке
JAVA_OPTS="$JAVA_OPTS -Dpcservice.endpoint=http://localhost:8080/ws/PayControlServiceV3?wsdl -Duser.language=ru -Dpaycontrol.locale=ru"
в параметре -Dpcservice.endpoint=http://<HOSTNAME>:<PORT>/ws/PayControlServiceV3?wsdl установить новое значение <PORT>.
Изменение порта PCIS Internal
Для изменения порта для подключения к PCIS Internal необходимо в БД PCS выполнить следующий запрос:
update pc_system set pc_is_internal_url='http://<HOSTNASME>:<PORT>/wsis/PayControlInteractionService?wsdl' where systemid='XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX';
где
- <HOSTNASME> — имя хоста PCIS Internal;
- <PORT> новое значение порта;
- XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX — UUID идентификатор прикладной системы.
Допускается выполнять запрос к БД PCS на обновление адреса PCIS Internal без указания systemid, в случае, если подключена только одна прикладная система, или необходимо обновить адрес PCIS Internal для всех прикладных систем.
После изменения номера порта, службу wildfly необходимо перезапустить.
Изменение порта PCIS External
Предупреждение! При изменении порта PCIS External мобильное приложение потеряет возможность подключения к серверу PayControl до тех пор, пока пользователю мобильного приложения не будет перевыпущен ключ с новым адресом подключения к серверу. |
Предупреждение! Изменение порта, на котором сервер PCIS External ожидает подключения не всегда ведёт к изменению порта назначения, который используется мобильным приложением для доступа к серверу PayControl. Такая ситуация, например, может возникнуть, если перед сервером PCIS External со стороны сети Интернет установлено оборудование/ПО, выполняющее трансляцию сетевых портов. |
При изменении порта PCIS External необходимо в БД PCS выполнить следующий запрос:
update pc_system set pc_is_external_url='http://<HOSTNASME>:<PORT>/PayControl-interaction-rest/' where systemid='XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX';
где
- <HOSTNASME> — имя хоста PCIS External, используемое мобильными устройствами для доступа к серверу PayControl;
- <PORT> новое значение порта;
- XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX — UUID идентификатор прикладной системы.
Допускается выполнять запрос к БД PCS на обновление адреса PCIS External без указания systemid, в случае, если подключена только одна прикладная система, или необходимо обновить адрес PCIS External для всех прикладных систем.
После изменения номера порта, службу wildfly необходимо перезапустить.
Валидация подключения
PostgreSQL
<validation> <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker"></valid-connection-checker> <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter"></exception-sorter> </validation>
Oracle
<validation> <check-valid-connection-sql>select 1 from dual</check-valid-connection-sql> <validate-on-match>false</validate-on-match> <background-validation>true</background-validation> <background-validation-millis>10000</background-validation-millis> </validation>
MS SQL
<validation> <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.mssql.MSSQLValidConnectionChecker"></valid-connection-checker> </validation>
Журналирование
Доступ к данным журнала
Журнал работы сервера PayControl записываются общий лог функционирования Wildfly.
Файлы журналов за текущий день доступны по следующему пути:
- Linux:
- /opt/wildfly/standalone/log/server.log
- Windows:
- C:wildflystandalonelogserver.log
Для просмотра журнала за другие дни, нужно добавить к имени файла требуемую дату в формате server.log.YYYY-MM-DD
Включение журналирования SOAP-вызовов
Для включения расширенного логирования необходимо:
- Остановить службу wildfly.
- Добавить после блока <extensions> … </extensions> в файл
- Linux:
- /opt/wildfly/standalone/configuration/standalone.xml
- Windows:
- C:wildflystandaloneconfigurationstandalone.xml
- следующий блок:
<system-properties> <property name="org.apache.cxf.logging.enabled" value="pretty"/> </system-properties>
- Linux:
- Запустить службу wildfly.
Направление логов Wildfly в Kafka
Исходник https://developer.jboss.org/docs/DOC-56423. Основное отличие — добавление <module name="com.fasterxml.jackson.core.jackson-databind"/>
в зависимости модуля org.apache.kafka.clients.
Модули
Файлы модулей можно загрузить с https://mvnrepository.com/
org.apache.kafka.clients
Создать файл /opt/wildfly/modules/system/layers/base/org/apache/kafka/clients/main/module.xml
с содержанием
<?xml version="1.0" encoding="UTF-8"?> <module name="org.apache.kafka.clients" xmlns="urn:jboss:module:1.8"> <resources> <resource-root path="kafka-clients-2.6.0.jar"/> <resource-root path="snappy-java-1.1.8.2.jar"/> <resource-root path="lz4-java-1.7.1.jar"/> </resources> <dependencies> <module name="javax.api"/> <module name="org.slf4j"/> <module name="com.fasterxml.jackson.core.jackson-databind"/> </dependencies> </module>
и добавить в директорию указанные в блоке resources
файлы.
org.apache.kafka.log4jappender
Создать файл /opt/wildfly/modules/system/layers/base/org/apache/kafka/log4jappender/main/module.xml
с содержанием
<?xml version="1.0" encoding="UTF-8"?> <module name="org.apache.kafka.log4jappender" xmlns="urn:jboss:module:1.8"> <resources> <resource-root path="kafka-log4j-appender-2.6.0.jar"/> <resource-root path="slf4j-log4j12-1.7.30.jar"/> </resources> <dependencies> <module name="org.slf4j"/> <module name="org.apache.kafka.clients" /> <module name="org.jboss.log4j.logmanager" /> </dependencies> </module>
и добавить в директорию указанные в блоке resources
файлы.
org.apache.log4j
Добавить модуль log4jappender в качестве зависимости в существующий org.apache.log4j модуль:
<module name="org.apache.log4j" xmlns="urn:jboss:module:1.6"> ... <dependencies> ... <module name="org.apache.kafka.log4jappender" export="true"/> </dependencies> </module>
org.jboss.as.standalone
Указать в имеющемся модуле org.jboss.as.standalone в качестве зависимости модуль org.apache.kafka.clients.
<module name="org.jboss.as.standalone" xmlns="urn:jboss:module:1.6"> ... <dependencies> ... <module name="org.apache.kafka.clients" /> </dependencies> </module>
Хэндлеры
Необходимо добавить перечисленные ниже хэндлеры в файл standalone.xml в блок <subsystem xmlns="urn:jboss:domain:logging:8.0">
kafka
<custom-handler name="kafka" class="org.apache.kafka.log4jappender.KafkaLog4jAppender" module="org.apache.log4j"> <level name="INFO"/> <formatter> <named-formatter name="PATTERN"/> </formatter> <properties> <property name="brokerList" value="localhost:9092"/> <property name="topic" value="out-topic"/> </properties> </custom-handler>
async-kafka-wrapper
<async-handler name="async-kafka-wrapper"> <level name="ALL"/> <queue-length value="1024"/> <overflow-action value="block"/> <subhandlers> <handler name="kafka"/> </subhandlers> </async-handler>
Включение хэндлера
В блок <handlers>
добавить <handler name="async-kafka-wrapper"/>
Проблемы и способы их устранения
Очень медленный старт через standalone.sh (каждый этап скрипта запуска — с большими задержками). Система отправляет сигнал на остановку сервиса
Вероятная проблема — неверные настройки DNS сервера.
Решение:Необходимо скорректировать настройки DNS.
Проблема обнаружилась 2018-07-27 при развёртывании у заказчика. A.bursakov (обсуждение) 19:56, 1 августа 2018 (MSK)
Не происходит «биндинг» IP-адреса адаптера
Вероятная проблема — отсутствие PTR-записи на DNS-сервере, или неправильная работа службы DNS.
Решение: Добавить в файл opt/wildfly/bin/standalone.conf (Linux) или C:optwildflybinstandalone.conf.bat (Windows), в переменную JAVA_OPTS параметр -Djboss.bind.address=0.0.0.0
Проблема проявилась на тестовом Windows-сервере A.bursakov (обсуждение) 19:56, 1 августа 2018 (MSK)
Частое появление WARNING в логе
Предупреждения в логе вида:
WARNING [org.apache.cxf.phase.PhaseInterceptorChain] (default task-1) Interceptor for {http://ws.safetech.ru/PayControlV3/}PayControlServiceV3 has thrown exception, unwinding now: org.apache.cxf.binding.soap.SoapFault: Error writing to XMLStreamWriter. Caused by: com.ctc.wstx.exc.WstxIOException: UT010029: Stream is closed Caused by: java.io.IOException: UT010029: Stream is closed
WARNING [org.apache.cxf.phase.PhaseInterceptorChain] (default task-1) Interceptor for {http://ws.safetech.ru/PayControlV3/}PayControlServiceV3 has thrown exception, unwinding now: org.apache.cxf.interceptor.Fault: Could not send Message. Caused by: java.io.IOException: Broken pipe
Могут быть вызваны системой мониторинга, которая для проверки того, что сервер доступен, устанавливает соединение и обрывает его получив лишь только header.
Для отключения предупреждений о непредвиденном закрытии соединения необходимо в файл /opt/wildfly/standalone/configuration/standalone.xml в блок
<profile> <subsystem xmlns="urn:jboss:domain:logging:X.X"> ... </subsystem> </profile>
добавить:
<!-- to prevent warnings on unsuspicious connection close --> <logger category="org.apache.cxf.phase.PhaseInterceptorChain"> <level name="ERROR"/> </logger>
INFO: Disabling contextual LOB creation as createClob() method threw error
Иногда смущает появление в журнале события, из-за присутствия в его составе слова «error»:
INFO [org.hibernate.engine.jdbc.env.internal.LobCreatorBuilderImpl] (ServerService Thread Pool -- 64) HHH000424: Disabling contextual LOB creation as createClob() method threw error : java.lang.reflect.InvocationTargetException
Для отключения этого сообщения необходимо установить hibernate.temp.use_jdbc_metadata_defaults=false
в файл persistence.xml, располагающийся внутри модуля сервера следующим образом:
<properties> ... <property name="hibernate.temp.use_jdbc_metadata_defaults" value="false"/> ... </properties>
Wildfly не стартует как служба и нет логов
Возможные проблемы:
- Некорректные права на директории/файлы в /opt/wildfly.
chown -RHv wildfly:wildfly /opt/wildfly
- Проблемы с определением необходимой Java. Для восстановления необходимо выполнить
sudo update-alternatives --config java