java—在oauth2身份验证后检查数据库中用户是否存在的正确方法

p3rjfoxz  于 2021-08-25  发布在  Java
关注(0)|答案(0)|浏览(215)

我正在使用springboot和oauth2开发一个web应用程序,它只需要google的身份验证。它只允许访问我的大学的成员,但不允许访问任何成员,他们必须在数据库中注册,特别是他们的电子邮件。因此,我创建了一个实体类用户:

User(id, email, role)

在此表中,角色为admin的用户可以添加用户、删除用户并更新其角色,因此其 Jmeter 板必须与普通用户不同。我开始创建我的自定义oauthuser,在这里我只存储来自经过身份验证的用户的名称和电子邮件。由于谷歌的限制,它只允许我组织的成员,所以在这里我必须实现一个功能,该功能将检查经过身份验证的用户的电子邮件是否在数据库中,然后检查他的角色并允许访问不同的功能。这是我被绊倒的部分,我不知道如何检查数据库中是否存在该电子邮件。
这是我的顾客:

private OAuth2User oAuth2User;

    public CustomOAuth2User(OAuth2User oAuth2User) {
        this.oAuth2User = oAuth2User;
    }

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

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

    @Override
    public String getName() {
        return oAuth2User.getAttribute("name");
    }

    public String getFullname(){
        return oAuth2User.getAttribute("name");
    }

    public String getEmail(){
        return oAuth2User.<String>getAttribute("email");
    }
}

这是我的网站安全配置:

public class WebSecurity extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception{
        http.authorizeRequests()
                .antMatchers("/user/**").hasAnyRole("ADMIN", "USER")
                .antMatchers("/admin/**").hasRole("ADMIN")
                .antMatchers("/index", "/login", "/oauth/**").permitAll()
                .and()
                .oauth2Login()
                .loginPage("/login")
                .userInfoEndpoint()
                .userService(customOAuthUserService);
    }

    @Autowired
    private CustomOAuthUserService customOAuthUserService;
}

在使用此功能获取google信息后,我没有找到任何方法来检查数据库中是否存在该电子邮件。我会感激任何形式的帮助,也许有更好的方式来做我在这里要做的事情。这将是我的用户实体:

public class User {

    @Id
    @Column(nullable = false, updatable = false)
    private Long id;

    @Column(nullable = false, updatable = false)
    private String email;

    @Column(nullable = false)
    private String role;
}

在我的用户存储库中,我实现了下一个查询:

@Query("SELECT s FROM User s WHERE s.email=?1")
    Optional<User> findUserByEmail(String email);

提前谢谢。

暂无答案!

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

相关问题