我正在使用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);
提前谢谢。
暂无答案!
目前还没有任何答案,快来回答吧!