Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在oauth2应用程序spring引导中正确设置用户角色_Java_Spring Boot_Spring Security_Google Oauth_Spring Security Oauth2 - Fatal编程技术网

Java 如何在oauth2应用程序spring引导中正确设置用户角色

Java 如何在oauth2应用程序spring引导中正确设置用户角色,java,spring-boot,spring-security,google-oauth,spring-security-oauth2,Java,Spring Boot,Spring Security,Google Oauth,Spring Security Oauth2,在我的应用程序中实现了oauth2之后,我正在与spring安全性作斗争。这是我的第一次经历,但我很高兴听到好听或愤怒的评论。这是改进的方法 问题: 在登录我的应用程序的过程中,我看到我从DefaultOidcUser类的google oidcuser对象中检索。此对象具有权限的集合,共有4项: 老实说,我不明白为什么我在我的系统中为这个用户获得了角色\用户,因为实际上它在我的系统中具有管理员角色(角色由我创建) 通常我在我的应用程序中有3个角色:用户、经理、管理员。但无法理解如何为特殊用户正确

在我的应用程序中实现了oauth2之后,我正在与spring安全性作斗争。这是我的第一次经历,但我很高兴听到好听或愤怒的评论。这是改进的方法

问题: 在登录我的应用程序的过程中,我看到我从DefaultOidcUser类的google oidcuser对象中检索。此对象具有权限的集合,共有4项:

老实说,我不明白为什么我在我的系统中为这个用户获得了角色\用户,因为实际上它在我的系统中具有管理员角色(角色由我创建)

通常我在我的应用程序中有3个角色:用户、经理、管理员。但无法理解如何为特殊用户正确设置特定角色

因此,当我把smth放在下面时:

  .antMatchers("/api/**").hasRole(Role.ADMIN.name())
  .antMatchers("/administration/**").hasRole(Role.ADMIN.name())
据我所知,我得到403个cos,每个用户都有一个角色用户

你能帮我设置每个用户的角色吗?除了我的数据库(不是谷歌默认的ROLSER_用户)? 我还读到了有关授权机构和授权机构地图绘制者的文章,但对我来说有点不清楚

我很乐意听取任何意见。任何有用的链接,以提高我对这方面的知识。Cos的主要目标:了解它是如何工作的

我的oauth2实现的其他类如下:

@Getter
@Setter
@RequiredArgsConstructor
public class CustomOidcUser implements OidcUser {

    private final OidcUser oidcUser;
    private String email;
    private String firstName;
    private String lastName;

    @Override
    public Map<String, Object> getClaims() {
        return oidcUser.getClaims();
    }
    @Override
    public OidcUserInfo getUserInfo() {
        return oidcUser.getUserInfo();
    }

    @Override
    public OidcIdToken getIdToken() {
        return oidcUser.getIdToken();
    }

    @Override
    public Map<String, Object> getAttributes() {
        return oidcUser.getAttributes();
    }

    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        return oidcUser.getAuthorities();
    }

    @Override
    public String getName() {
        return oidcUser.getName();
    }

}

对于OIDC,默认情况下,Spring会将作用域和默认用户角色映射到OidcUser对象上授予的权限。 您只需将其返回到CustomOidcUser即可

@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
    return oidcUser.getAuthorities();
}
@覆盖
公共收藏
@Configuration
@EnableWebSecurity
@RequiredArgsConstructor
@EnableGlobalMethodSecurity(prePostEnabled = true,securedEnabled = true)
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

  private final AuthProvider authProvider;
  private final OnSuccessHandler onSuccessHandler;
  private final CustomOidcUserService customOidcUserService;
  private final UserService userService;

  protected void configure(HttpSecurity http) throws Exception {
    SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler();
    successHandler.setUseReferer(true);
    successHandler.setDefaultTargetUrl("/success");
    successHandler.setAlwaysUseDefaultTargetUrl(true);

    http
        .addFilterAfter(new UserHasManagerFilter(userService), BasicAuthenticationFilter.class)
        .cors()
        .and()
          .csrf()
          .disable()
          .authorizeRequests()
          .antMatchers("/api/**").hasRole(Role.ADMIN.name())
          .antMatchers("/administration/**").hasRole(Role.ADMIN.name())
        .and()
            .httpBasic()
        .and()
          .formLogin()
          .loginPage("/unauthorized")
          .loginProcessingUrl("/login")
          .defaultSuccessUrl("/success")
          .failureUrl("/failed")
          .successHandler(successHandler)
          .usernameParameter("email")
          .passwordParameter("password")
          .permitAll()
        .and()
          .logout()
          .logoutUrl("/logout")
          .logoutSuccessUrl("/logout_success")
          .permitAll()
        .and()
            .oauth2Login()

              .loginPage("/")
              .userInfoEndpoint(userInfoEndpoint ->
                      userInfoEndpoint.oidcUserService(customOidcUserService)
                      .customUserType(CustomOidcUser.class, "google")
//                      .userAuthoritiesMapper(userAuthoritiesMapper())
              )

              .defaultSuccessUrl("/dashboard", true)
              .successHandler(onSuccessHandler)
              .failureHandler(authenticationFailureHandler())
            .permitAll()
        .and()
        .authorizeRequests()
        .antMatchers("/**")
        .permitAll();
  }
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
    return oidcUser.getAuthorities();
}
Collection<GrantedAuthority> authorities ....
authorities.add(new SimpleGrantedAuthority("ROLE_...."));