CAS + Spring安全配置帮助-setUserDetailsS​​ervice

问题描述

一段时间以来,我一直在尝试让我们的CAS实例与Spring Security 5一起使用。我已建立连接,但使用下面的默认配置,我的用户以[email protected]的身份返回(如预期):

    @Bean
public CasAuthenticationProvider casAuthenticationProvider(
  TicketValidator ticketValidator,ServiceProperties serviceProperties) {
    CasAuthenticationProvider provider = new CasAuthenticationProvider();
    provider.setServiceProperties(serviceProperties);
    provider.setTicketValidator(ticketValidator);
    provider.setUserDetailsService(
      s -> new User("[email protected]","Mellon",true,AuthorityUtils.createAuthorityList("ROLE_ADMIN")));
    provider.setKey("CAS_PROVIDER_LOCALHOST_8900");
    return provider;
}

我认为我需要做的是创建一个自定义UserDetailsS​​ervice服务来存储CAS中的主体。我发现有意义的方法始于:

@Override
public UserDetails loadUserDetails (Authentication authentication) throws UsernameNotFoundException{
CasAssertionAuthenticationToken ...
getprinciple
getuser
get email
get roles
return new User(username,"",collection)

运行该命令不会编译。从我的研究中,我认为这可能是旧代码?所有较新的示例都具有以下内容:

@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
    Optional<UserObject> user = userRepository.findByUsername(s);

    if (!user.isPresent()) {
        throw new UsernameNotFoundException("User not found by name: " + username);
    }
    return toUserDetails(user.get());
}

但是该代码在整个地方都会产生错误(无法提取ResultSet)。尽管遍历代码,但String用户名确实返回了我的用户名(大概是从CAS中提取的),但它在网上轰炸了:可选user = userRepository.findByUsername(s);

因此,我不确定使此工作最佳的方法。我希望该应用程序强制用户登录我们的CAS系统(确实如此),并将CAS主体(用户名)和角色(从LDAP检索的组)存储在User对象中。我还没有想到要存储LDAP组,因为我不知道如何存储用户名。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)