如何扩展springoodcuser以使用customuserdetails

xiozqbni  于 2021-07-13  发布在  Java
关注(0)|答案(0)|浏览(199)

这是我在这里的第一个问题,所以,它很有帮助,节省了我很多时间,但现在我找不到任何解决我的问题的办法。因为我对spring,尤其是Spring Security 还比较陌生,所以如果我有更多的知识的话,我会被一些很容易的东西困住。我有一个使用本地用户数据库的现有应用程序。它使用自定义的userdetails实现,如果与user:password authentification 通过登录表单。以下是当前设置:

public class SecurityContext extends WebSecurityConfigurerAdapter {
....
  @Autowired
  public void configureGlobal(final AuthenticationManagerBuilder auth) throws Exception {
    auth.authenticationProvider(authenticationProvider()).userDetailsService(userDetailsService());
  }

  @Bean
  public AuthenticationProvider authenticationProvider() {
    DaoAuthenticationProvider result = new DaoAuthenticationProvider();

    result.setUserDetailsService(userDetailsService());
    result.setPasswordEncoder(passwordEncoder());

    return result;
  }

现在我想从一个说openidconnect的外部idp使用sso。通过阅读文档,我能够以“默认”的方式启动并运行它。这就是,在我的进程的和处,获取一个用户,该用户是oidcuser的示例。我需要该用户要么被扩展,要么合并现有的userdetails。文档(spring-boot和oauth2)建议
实现并公开oauth2userservice以调用授权服务器和数据库。您的实现可以委托给默认实现,这将完成调用授权服务器的繁重工作。您的实现应该返回扩展自定义用户对象并实现oauth2user的内容。
我能够引入自己的oauth2userservice,通过设置:

@Override
  protected void configure(final HttpSecurity http) throws Exception {
    http.exceptionHandling()
        .accessDeniedHandler(accessDeniedHandler())
        .and()
        .oauth2Login()
        .failureHandler(authenticationFailureHandler())
        .successHandler(authenticationSuccessHandler())
        .userInfoEndpoint()
        .userService(this.oauth2UserService())
        .oidcUserService(this.oidcUserService());}

private OAuth2UserService<OidcUserRequest, OidcUser> oidcUserService() {
    final OidcUserService delegate = new OidcUserService();
    return (userRequest) -> { 
          OidcUser oidcUser = delegate.loadUser(userRequest);
           //..DO some additional Stuff check against external Server
         //Here I could load my custom userDetails
        GatesUserDetails userDetails = (GatesUserDetails) userDetailsService.loadUserByUsername("131:" + username);
        ....

但我现在知道了如何让我的customuser有效地返回到我的函数。我试图在userdetails中实现oidcuser接口,但它仍然不起作用。任何提示(即使是对一个更容易理解的医生)都将不胜感激。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题