问题描述
一段时间以来,我一直在尝试让我们的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;
}
我认为我需要做的是创建一个自定义UserDetailsService服务来存储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 (将#修改为@)