【问题标题】:Authenticate via spring LDAP with additional security check in database通过 spring LDAP 进行身份验证,并在数据库中进行额外的安全检查
【发布时间】:2013-09-15 06:54:10
【问题描述】:

LDAP 身份验证后,我想检查数据库中的用户 ID 是否列在用户表中。

我怎样才能做到这一点?我在 Google 上看到的只是通过 LDAP 进行的身份验证和数据库上的用户角色检索。

【问题讨论】:

    标签: spring authentication jdbc spring-security ldap


    【解决方案1】:

    你必须改变你拥有用户 Prancipal 的方式:

    你会保留你的 ldapProvider :

    <beans:bean id="ldapProvider" class="org.springframework.security.ldap.authentication.LdapAuthenticationProvider">   
    

    ....

    <beans:bean id="customUserDetailsMapper" class="xxxxx.CustomUserDetailsMapper">
        <beans:constructor-arg ref="customUserDetailService" />
    </beans:bean>
    
    <beans:bean id="customUserDetailService" class="xxxxxx.CustomUserDetailService">
    </beans:bean>
    

    定义一个自定义的 UserDatailsMapper :

    public class CustomUserDetailsMapper extends LdapUserDetailsMapper {
    
    private UserDetailsService userDetailService;
    
    public CustomUserDetailsMapper (UserDetailsService userDetailService) {
        this.userDetailService = userDetailService;
    }
    
    @Override
    public UserDetails mapUserFromContext(DirContextOperations ctx,
            String username, Collection<? extends GrantedAuthority> authorities) {
    
        return (UserDetails) this.userDetailService.loadUserByUsername(username);
    }
    

    }

    并定义一个自定义 UserDetailsS​​ervice :

    public class CustomUserDetailService implements UserDetailsService {
    
    
    @Autowired
    protected UserRepository userRepository;
    
    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        UserDb user = userRepository.findByUserName(username);
    
        if (UserDb  == null) {
            throw new UsernameNotFoundException(username);
        }           
    
        // Construct customUserDetails
    
        return (UserDetails)customUserDetails;
    }
    

    【讨论】:

    • 我是 Spring Security 的新手,所以我很欣赏一些解释。 UserDetails 来自哪里?
    • org.springframework.security.core.userdetails.UserDetails 这是spring security的核心接口
    • @SciasTwentyThree 你好,SciasTwentyThree 你实现目标了吗?我正在为 LDAP 身份验证后的数据库层寻找类似的严格安全性,如果您能分享您的答案,那就太好了 - 谢谢
    猜你喜欢
    • 2014-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-09
    • 2014-06-12
    • 1970-01-01
    • 2016-12-24
    • 2020-02-16
    相关资源
    最近更新 更多