如何从安全上下文中获取 Bean 属性.xml并在 java 类中使用它们?



我需要在安全上下文中传递我的 bean 的属性.xml并在 LDAP 服务器配置中使用它,只传递变量而不直接写入配置数据,因此只需要从安全上下文中更改变量。修改情况下的 XML。

这是我的安全上下文 bean

<beans:bean id="myUserDetailsService" class="com.tilab.ngasp.policy.PolicyManager">
<beans:property name="UrlLDAP" value="ldap://localhost:389" />
<beans:property name="Principal" value="cn=Manager,dc=maxcrc,dc=com" />
<beans:property name="Credential" value="secret" />
<beans:property name="InitialContext" value="com.sun.jndi.ldap.LdapCtxFactory" />
</beans:bean>

这是我必须在不插入配置信息的情况下配置 LDAP 服务器但只传递带有 bean 属性的变量时 java 类的一部分

@SuppressWarnings("unchecked")
public NgaspUsers findUser(String user)
{
NgaspUsers utente = null;       
Properties env = new Properties();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://localhost:389");
env.put(Context.SECURITY_PRINCIPAL, "cn=Manager,dc=maxcrc,dc=com");
env.put(Context.SECURITY_CREDENTIALS, "secret");

我想要这样的DLAP配置:

env.put(Context.INITIAL_CONTEXT_FACTORY,StringVariableWithContextFactory);
env.put(Context.PROVIDER_URL, StringVariableWithLdapUrl);
env.put(Context.SECURITY_PRINCIPAL, StringVariableWithRootInformation);
env.put(Context.SECURITY_CREDENTIALS,StringVariableWithPassword);

我正在使用Spring Security,Eclipse和Tomcat 6.0。

谢谢大家,希望这些信息足以帮助我!

--- 编辑 为 梅萨乌德·格尔努提

我尝试使用您的最后一个方法也使用外部类,但是我在env.put(Context.INITIAL_CONTEXT_FACTORY,myUserDetailsService.getInitialContext())中遇到了此错误;

错误:方法 getInitialContext() 未定义类型策略管理器

策略管理器.java现在如此:

@SuppressWarnings("unchecked")
@Autowired
@Qualifier("myUserDetailsService")
PolicyManager myUserDetailsService;
public NgaspUsers findUser(String user)
{
NgaspUsers utente = null;       
Properties env = new Properties();
env.put(Context.INITIAL_CONTEXT_FACTORY,myUserDetailsService.getInitialContext()); 
env.put(Context.PROVIDER_URL, "ldap://localhost:389");
env.put(Context.SECURITY_PRINCIPAL, "cn=Manager,dc=maxcrc,dc=com");
env.put(Context.SECURITY_CREDENTIALS, "secret");

我刚刚尝试了第一个"放置",但我已经遇到了这个问题,我是否正确地将注释插入了正确的位置还是还有其他问题?

编辑 2 :

像这样的基础知识和设置器或需要提取 xml 文件中的值?

public String InitialContext1;
public String Credential1;
public String UrlLDAP1;
public String Principal1;

public String getInitialContext1() {
return InitialContext1;
}
public void setInitialContext1(String initialContext) {
InitialContext1 = initialContext;
}
public String getCredential1() {
return Credential1;
}
public void setCredential1(String credential) {
Credential1 = credential;
}
public String getUrlLDAP1() {
return UrlLDAP1;
}
public void setUrlLDAP1(String urlLDAP) {
UrlLDAP1 = urlLDAP;
}
public String getPrincipal1() {
return Principal1;
}
public void setPrincipal1(String principal) {
Principal1 = principal;
}

为什么不使用 Spring Security LDAP 默认提供程序进行身份验证:

<sec:authentication-manager>
<sec:authentication-provider ref="ldapAuthProvider" />
</sec:authentication-manager>
<bean id="contextSource"
class="org.springframework.security.ldap.DefaultSpringSecurityContextSource">
<constructor-arg value="ldap://localhost:389/cn=Manager,dc=maxcrc,dc=com" />
<property name="userDn" value="user" />
<property name="password" value="pass" />
</bean>
<bean id="userSearch"
class="org.springframework.security.ldap.search.FilterBasedLdapUserSearch">
<constructor-arg index="0" value="" />
<constructor-arg index="1" value="(sAMAccountName={0})" />
<constructor-arg index="2" ref="contextSource" />
<property name="searchSubtree" value="true" />
</bean>
<bean id="ldapAuthProvider"
class="org.springframework.security.ldap.authentication.LdapAuthenticationProvider">
<constructor-arg>
<bean
class="org.springframework.security.ldap.authentication.BindAuthenticator">
<constructor-arg ref="contextSource" />
<property name="userSearch" ref="userSearch" />
</bean>
</constructor-arg>
<constructor-arg>
<bean
class="org.springframework.security.ldap.userdetails.DefaultLdapAuthoritiesPopulator">
<constructor-arg ref="contextSource" />
<constructor-arg value="" />
<property name="defaultRole" value="ROLE_USER"/>
<property name="searchSubtree" value="true" />
<property name="ignorePartialResultException" value="true" />
</bean>
</constructor-arg>
</bean>

如果要使用自己的类,可以添加

@Autowired
@Qualifier("myUserDetailsService") 
PolicyManager myUserDetailsService;

然后通过示例访问所有属性:

Properties env = new Properties();
env.put(Context.INITIAL_CONTEXT_FACTORY,myUserDetailsService.getInitialContext()); 

您必须为类上的所有属性生成gettersetterPolicyManager

相关内容

  • 没有找到相关文章

最新更新