Настройте информацию о доступе к LDAP, извлеченную из Wildlfy standalone.xml в Spring Security - PullRequest
0 голосов
/ 12 января 2019

Я разрабатываю веб-приложение, используя Spring MVC, Maven и Wildfly. Я не использую web.xml для настройки источников данных. Мой конфиг применяется через классы Java.

Мне нужно получить доступ к информации о сервере LDAP (url, base dn, username, password), которая находится в standalone.xml, расположенном в папке конфигурации Wildfly сервера, из класса конфигурации Java Spring Security. По вопросам безопасности мне не разрешено кодировать информацию LDAP в файле application.properties. Я не знаю, как это сделать без использования web.xml. Есть предложения?

Вот что у меня есть ...

- standalone.xml (Конфигурация LDAP)

<security-domain name="MYDOMAIN">
  <authentication>
    <login-module code="LdapExtended" flag="required">
      <module-option name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory"/>
      <module-option name="java.naming.provider.url" value="ldap://myurl:000/"/>
      <module-option name="java.naming.security.authentication" value="simple"/>
      <module-option name="bindDN" value="mybinddn"/>
      <module-option name="bindCredential" value="00000000000"/>
      <module-option name="baseCtxDN" value="DC=bla,DC=bla,DC=bla"/>
      <module-option name="baseFilter" value="(sAMAccountName={0})"/>
      <module-option name="rolesCtxDN" value="OU=Ludopatia,DC=iplyc,DC=gov,DC=ar"/>
      <module-option name="roleFilter" value="(member={1})"/>
      <module-option name="roleAttributeID" value="cn"/>
      <module-option name="searchScope" value="ONELEVEL_SCOPE"/>
      <module-option name="allowEmptyPasswords" value="false"/>
    </login-module>
  </authentication>
</security-domain>

- SecurityConfiguration.java

открытый класс SecurityConfiguration расширяет WebSecurityConfigurerAdapter {

@Value("${ldap.urls}")
private String ldapUrls;

@Value("${ldap.base.dn}")
private String ldapBaseDn;

@Value("${ldap.username}")
private String ldapUsername;

@Value("${ldap.password}")
private String ldapPassword;

@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception{
    auth.ldapAuthentication()
    .userSearchFilter("sAMAccountName={0}")
    .groupSearchBase("ou=Ludopatia")
    .groupSearchFilter("member={0}")
    .contextSource()
       .url(ldapUrls+ldapBaseDn)
       .managerDn(ldapUsername)
       .managerPassword(ldapPassword);
}

}

- pom.xml (часть, в которой установлен плагин wildfly-maven-plugin)

<plugin>  
    <groupId>org.wildfly.plugins</groupId>  
    <artifactId>wildfly-maven-plugin</artifactId>  
    <version>1.0.1.Final</version>  
    <configuration>
             <jboss-home>${wildfly.home}</jboss-home>
             <modules-path>${wildfly.home}/modules</modules-path>
         <server-config>standalone.xml</server-config>
         <filename>${project.build.finalName}.war</filename>
    </configuration>  
</plugin>

- application.properties

ldap.urls=ldap://myurl:000/
ldap.base.dn=dc=bla,dc=bla,dc=bla
ldap.username=mybinddn
ldap.password=000000000000

Настроен так, работает отлично. Но мне нужно удалить информацию LDAP из application.properties и напрямую взять ее из standalone.xml, не используя web.xml.

Заранее спасибо за помощь.

1 Ответ

0 голосов
/ 22 января 2019

Вы можете напрямую установить эти значения из консоли WILDFLY как системные свойства, и они будут автоматически заполнены в файле standalone.xml.

Для этого выполните следующие действия:

  1. Включите консоль управления, добавив пользователя-администратора (add-user.bat для Windows / add-user.sh для Linux).
  2. После добавления пользователя, консоль управления доступом (http://127.0.0.1:9990/management).
  3. Он запросит имя пользователя и пароль. Введите имя пользователя и пароль.
  4. Перейдите к Конфигурация -> Системные свойства и добавьте столько свойств, сколько хотите. Они будут отображены в файле конфигурации.

    <system-properties>
      <property name="ldap.urls" value="ldap://myurl:000/"/>
      <property name="ldap.base.dn" value="dc=bla,dc=bla,dc=bla"/>
      <property name="ldap.username" value="mybinddn"/>
      <property name="ldap.password" value="000000000000"/>
    </system-properties>
    

Чтобы получить доступ к этим свойствам в вашем коде, вам нужно получить к ним доступ как к системным свойствам, таким как

String ldapUsername= System.getProperty("ldap.username");
String ldapPassword= System.getProperty("ldap.password");

Единственным недостатком этого подхода является то, что значения этих свойств будут видны все время, поэтому я предложил хранилище проект.

Еще одно предложение - предоставить зашифрованные значения для конфигурации ldap и расшифровать их после прочтения.

...