010
Настройка миграции из АД
011
012
Точечная синхронизация и множественная миграция настраиваются
013 одновременной в одном конфигурационном файле. Конфигурационный файл
014 находиться по адресу:
015
016
017 /mybpm/configs/AdConfig.txt
018
019
020
021
022
023
Этот файл уже должен существовать и в нём некоторые поля уже
024 имеют значения по умолчанию. Не трогайте те настройки, которые уже
025 есть, если вы точно не знаете что делаете.
026
027
В первую очередь необходимо настроить доступ к АД по протоколу
028 LDAP для этого нужно попросить у администратора параметры доступа к
029 АД и заполнить следующие поля:
030
031
032 adUsername=cn=greetgo,ou=temp,dc=hq,dc=bc
033 adPassword=anyPassword
034 adPort=389
035 adBase=dc=hq,dc=bc
036 adHost=10.0.0.1
037 useSSL=false
038
039
040
041
042
043
Здесь приведены значения для понимания как они должны выглядеть.
044 У вас они будут другими, но похожими. Следует отметить, что
045 некоторые параметры можно передать через переменные окружения,
046 например логин и пароль, чтобы они в конфиге не были доступны в
047 открытом виде. Для этого нужно вначале эти переменные окружения
048 определить. Например вы определили сделующие переменные
049 окружения:
050
051
052 AD_LOGIN=cn=greetgo,ou=temp,dc=hq,dc=bc
053 AD_PASSWORD=very-big-secret
054
055
056
057
058
059
И теперь нужно из конфига на них сослаться, для этого поменять
060 следующие параметры на такие:
061
062
063 adUsername:ENV=AD_LOGIN
064 adPassword:ENV=AD_PASSWORD
065
066
067
068
069
070
Т.е. нужно к ключу добавить окончание :ENV, которое
071 говорит, что правее равно содержится имя переменной окружения, из
072 которой нужно читать значение данного параметра.
073
074
Синхронизация рабочих групп
075
076
Для того, чтобы синхронизировать рабочие группы нужно заполнить
077 параметр:
078
079
080 adGroupFieldCode=
081
082
083
084
085
086
Если этот параметр равен пустой строке, то рабочие группы
087 синхронизировать не будут. Если же нужно синхронизация этого
088 параметра, то нужно у рабочей группы создать поле для синхронизации
089 с АД. Например вы создали у БО "Рабочая группа" поле:
090
091
092 Название поля: Код роли из АД
093 Тип поля: Текстовая строка (INPUT_TEXT)
094 Код поля: AD_ROLE
095
096
097
098
099
100
Тогда нужно в конфиге задать этот параметр так:
101
102
103 adGroupFieldCode=AD_ROLE
104
105
106
107
108
109
Т.е. его значение должно соответствовать коду этого поля.
110
111
После этого, при синхронизации с АД этот пользователь будет
112 добавляться ко всем группам, которые соответствуют тем ролям,
113 которые приходят из АД для этого пользователя.
114
115
Например, вы создали рабочие группы:
116
117
118
119
120 | Имя |
121 Значение поля AD_ROLE |
122
123
124
125
126
127 | Центральная группа рассылок |
128 CN=Central,OU=Группы рассылок,DC=ok,DC=kz |
129
130
131
132 | Проблемные кредиты |
133 CN=problem,OU=DC=ok,DC=kz |
134
135
136
137 | Подключён к VPN |
138 CN=vpn_user,OU=Groups,DC=ok,DC=kz |
139
140
141
142
143
И пользователь example в АД содержит две роли:
144 CN=Central,OU=Группы рассылок,DC=ok,DC=kz и
145 CN=problem,OU=DC=ok,DC=kz. А в системе он находиться в
146 двух группах: Проблемные кредиты и Подключён к
147 VPN. То при входе в систему он будет исключён из группы
148 Подключён к VPN и добавлен в группу: Центральная
149 группа рассылок. А в группе Проблемные кредиты
150 он останется.
151
152
Также пользователь будет исключён из всех остальных групп, даже
153 тек, в которых поле AD_ROLE будет не заполнено.
154
155
Настройка множественной миграции
156
157
Множественную миграцию нужно дополнительно настраивать. Для
158 этого нужно в конфигурационном файле:
159
160
161 /mybpm/scheduler/core/MigrateFromAdScheduler.scheduler-config.txt
162
163
164
165
166
167
Настроить расписание запуска в параметре:
168
169
170 migrate = 02:00
171
172
173
174
175
176
В данном случае настроен запуск в 2 часа ночи. Какие сюда можно
177 вносить данные более детально читайте в самом файле - там вначале
178 всё расписано.
179
180
После установки этого параметра, ночью запуститься множественная
181 миграция и все пользователи из АД будут скопированы в систему.
182
183
Логирование миграции из АД
184
185
В конфигурационном файле:
186
187
188 /mybpm/logging/structure.txt
189
190
191
192
193
194
Нужно настроить вывод логов для миграции из АД. Вот эти строки
195 это настраивают.
196
197
198 category AdMigration
199 level TRACE
200 assign_to adMigration
201
202 destination adMigration to_file migration/ad
203 layout trace
204 level TRACE
205
206 destination tracer_ad_1 to_file traces2/ad_1
207 layout trace
208 level TRACE
209
210 category tracer_ad_1
211 level TRACE
212 assign_to tracer_ad_1
213
214
215
216
217
218
Эти строки настраивают файлы логирования:
219 migration/ad.log и traces2/ad_1.log. В
220 этих логах будут сохраняться состояния миграции и некоторые
221 полезные данные. Например в файле ad_1 появляются роли
222 из АД, которые назначены только что зашедшему в систему
223 АД-пользователю.
224
225
226
at kz.greetgo.md_reader.util.MdUtil.xmlTextToDoc(MdUtil.java:80)
at kz.greetgo.md_reader.core.MdConverter.prepareHtmlFileFrom(MdConverter.java:136)
at kz.greetgo.md_reader.core.MdConverter.convert(MdConverter.java:208)
at kz.greetgo.md_reader.controller.RenderController.downloadToc(RenderController.java:360)
at kz.greetgo.md_reader.controller.RenderController.request(RenderController.java:108)
at jdk.internal.reflect.GeneratedMethodAccessor7.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:207)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:152)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:884)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1081)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:974)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1011)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903)
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:205)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)
at kz.greetgo.md_reader.interceptors.TextReplaceFilter.doFilter(TextReplaceFilter.java:36)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:166)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:341)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:894)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: java.io.IOException: Server returned HTTP response code: 429 for URL: http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent
at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:2000)
at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1589)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:677)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startEntity(XMLEntityManager.java:1397)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startEntity(XMLEntityManager.java:1333)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl.startPE(XMLDTDScannerImpl.java:732)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl.skipSeparator(XMLDTDScannerImpl.java:2101)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl.scanDecls(XMLDTDScannerImpl.java:2064)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl.scanDTDExternalSubset(XMLDTDScannerImpl.java:299)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.dispatch(XMLDocumentScannerImpl.java:1165)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.next(XMLDocumentScannerImpl.java:1040)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:943)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:605)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:542)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:889)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:825)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
at java.xml/com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:247)
at java.xml/com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:342)
at java.xml/javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:122)
at kz.greetgo.md_reader.util.MdUtil.xmlTextToDoc(MdUtil.java:71)
... 48 more