我正在使用Spring MVC,Maven和Wildfly开发一个Webapp。我没有使用web.xml来配置数据源。我的配置是通过Java类应用的。
我需要从Java Spring Security配置类访问LDAP服务器信息(URL,基本dn,用户名,密码),该信息位于服务器的Wildfly配置文件夹中的standalone.xml中。出于安全问题,我不允许在application.properties文件中编码LDAP信息。不使用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
像这样配置,可以完美运行。但是我需要从application.properties中删除LDAP信息,并直接从standalone.xml中获取它,而无需使用web.xml。
预先感谢您的帮助。
答案 0 :(得分:0)
您可以直接从WILDFLY控制台中将这些值设置为系统属性,并将它们自动填充到standalone.xml文件中。
为此,请执行以下步骤:
导航到配置->系统属性,并添加所需数量的属性。它们将显示在配置文件中。
<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");
此方法的唯一缺点是这些属性的值始终可见,这就是我建议使用vault项目的原因。
另一个建议是为ldap配置提供加密的值,并在读取后解密它们。