当前位置: 首页 > 知识库问答 >
问题:

Spring Security LDAP和数据库角色

屠锐
2023-03-14

在我们的新的保险项目中,我试图及其

我想检查用户名/密码对广告,

共有2个答案

阎嘉荣
2023-03-14

你很可能需要做一个定制的UserDetai

<beans:bean id="userDetailsService" class="com.app.MyUserDetailsServiceImpl" />

<authentication-manager>
  <authentication-provider user-service-ref="userDetailsService">
    <password-encoder hash="plaintext" />
  </authentication-provider>
</authentication-manager>

在loadUserByUsername()中,您将创建一个UserDetails,设置用户名、密码和“权限”,即角色。

这篇博客文章有一个关于如何使用数据库的示例,您应该能够根据自己的需求进行调整。

曹奇文
2023-03-14

现在实现这一点的最简单的方法(Spring Security 3.2.5.RELEASE)是通过实现一个自html" target="_blank">定义的< code > ldapaauthoritiespoulator ,它使用一个自定义的< code>JdbcDaoImpl从数据库中获取授权。

假设您使用默认的数据库模式,并且在LDAP中使用相同的用户名进行身份验证,并且在< code>authorities表中使用相同的外键,那么您只需要:

package demo;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Collection;
import java.util.List;

import org.springframework.jdbc.core.RowMapper;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.AuthorityUtils;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.core.userdetails.jdbc.JdbcDaoImpl;

import org.springframework.ldap.core.DirContextOperations;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.ldap.userdetails.LdapAuthoritiesPopulator;

/*
 * You need to extend JdbcDaoImpl to expose the protected method loadUserAuthorities.
 */
public class CustomJdbcUserDetailsService extends JdbcDaoImpl {

    @Override
    public List<GrantedAuthority> loadUserAuthorities(String username) {
        return super.loadUserAuthorities(username);
    }
}


/*
 * Then, the only thing your populator needs to do is use the custom UserDetailsService above.
 */
public class CustomLdapAuthoritiesPopulator implements LdapAuthoritiesPopulator {

    private static final Logger LOGGER = LoggerFactory.getLogger(CustomLdapAuthoritiesPopulator.class);

    private CustomJdbcUserDetailsService service;

    public CustomLdapAuthoritiesPopulator(CustomJdbcUserDetailsService service) {
        this.service = service;
    }

    public Collection<? extends GrantedAuthority> getGrantedAuthorities(DirContextOperations user, String username) {
        return service.loadUserAuthorities(username);
    }

}

现在剩下唯一配置LDAP身份验证

在<code>配置</code>的注释子类<code>全局方法安全配置</code>或<code>Web安全配置适配器</code>中,添加以下内容:

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {

    /* other authentication configurations you might have */

    /*
     * This assumes that the dataSource configuring
     * the connection to the database has been Autowired
     * into this bean.
     *
     * Adapt according to your specific case.
     */
    CustomJdbcUserDetailsService customJdbcUserDetailsService = new CustomJdbcUserDetailsService();
    customJdbcUserDetailsService.setDataSource(dataSource);

    CustomLdapAuthoritiesPopulator customLdapAuthoritiesPopulator = new CustomLdapAuthoritiesPopulator(customJdbcUserDetailsService);

    auth.ldapAuthentication().ldapAuthoritiesPopulator(customLdapAuthoritiesPopulator)/* other LDAP configurations you might have */;

    /* yet more authentication configurations you might have */
}

参考https://github.com/pfac/howto-spring-security的例子。

免责声明:我一直只使用Java配置,所以谨慎行事,可能会有一些错误。

与使用LDAP进行身份验证的其他配置不同,似乎没有漂亮的XML标记来定制< code > ldapaauthoritiespoulator 。所以,必须手动完成。假设已经定义了配置到LDAP服务器的连接的bean contextSource,将以下内容添加到您的Spring XML配置中:

<beans:bean id="customJdbcUserDetailsService" class="demo.CustomJdbcUserDetailsService" />
<beans:bean id="customLdapAuthoritiesPopulator" class="demo.CustomLdapAuthoritiesPopulator">
    <beans:constructor-arg ref="customJdbcUserDetailsService" />
</beans:bean>

<beans:bean id="ldapAuthProvider" class="org.springframework.security.ldap.authentication.LdapAuthenticationProvider">
    <beans:constructor-arg>
        <beans:bean class="org.springframework.security.ldap.authentication.BindAuthenticator">
            <beans:constructor-arg ref="contextSource" />
            <!--
                other configurations you might need
            -->
        </beans:bean>
    </beans:constructor-arg>
    <beans:constructor-arg ref="customLdapAuthoritiesPopulator" />
</beans:bean>

<security:authentication-manager>
  <security:authentication-provider ref="ldapAuthProvider" />
</security:authentication-manager>

来源:http://spapas . github . io/2013/10/14/spring-LDAP-custom-authorities/# spring-security-LDAP-with-custom-authorities

 类似资料:
  • 本文向大家介绍postgresql 创建角色和匹配的数据库,包括了postgresql 创建角色和匹配的数据库的使用技巧和注意事项,需要的朋友参考一下 示例 为了支持给定的应用程序,您通常会创建一个新角色并与之匹配。 要运行的shell命令如下: 假定pg_hba.conf已经正确配置,可能看起来像这样:            

  • 【注意】下列选项和选项卡会根据服务器版本而有所不同。 常规属性 角色名 定义数据库角色的名。 所有者 指定数据库角色的所有者。 成员属于 在列表里,指定此数据库角色成为已选择的数据库角色的成员。 成员 在列表里,指定已选择的数据库用户和角色成为此数据库角色的成员。 拥有的模式 在列表里,勾选数据库角色拥有的模式。 数据库权限 在网格中,勾选“权限”列出的数据库权限,勾选“授予”、“含授予选项”或“

  • 【注意】下列选项和选项卡会根据服务器版本而有所不同。 常规属性 角色名 定义数据库角色的名。 所有者 指定数据库角色的所有者。 成员 在列表里,指定已选择的数据库用户和角色成为此数据库角色的成员。 成员属于 在列表里,指定此数据库角色成为已选择的数据库角色的成员。 拥有的模式 在列表里,勾选数据库角色拥有的模式。 数据库权限 在网格中,对照在“权限”列出的数据库权限,勾选“授予”、“授予选项”或“

  • 【注意】下列选项和选项卡会根据服务器版本而有所不同。 常规属性 角色名 定义数据库角色的名。 所有者 指定数据库角色的所有者。 成员属于 在列表里,指定此数据库角色成为已选择的数据库角色的成员。 成员 在列表里,指定已选择的数据库用户和角色成为此数据库角色的成员。 拥有的模式 在列表里,勾选数据库角色拥有的模式。 数据库权限 在网格中,勾选“权限”列出的数据库权限,勾选“授予”、“含授予选项”或“

  • 我需要一些帮助来理解如何将HTML与Angular一起使用。我这里有个目标。我想在下拉列表中显示汽车的。但是当您选择一辆时,变量应该是整个car对象。但是仍应仅显示。 这里有一个玩这个的地方:https://stackblitz.com/edit/angular-cwmwke

  • 我不太确定如何使用actors访问数据库。在Akka的文档和书籍中,这个主题似乎被省略了。 一种解决方案可以是无状态参与者中的包装DAO。例如,对于数据库中的每个表(或域对象类型或聚合类型),可以创建一个负责所有CRUD操作的参与者。这种方法的一个变体可以是命令和查询的分离。例如,对于每个数据类型,1个命令参与者(用于并发)和10个查询参与者(用于并行性)。 另一种方法可以是创建只表示数据库中一行