fix profile cannot access while logining from GG account

This commit is contained in:
2026-07-02 14:26:08 +07:00
parent ba587a40cb
commit ba7a43e637
10 changed files with 26 additions and 26 deletions
@@ -12,7 +12,7 @@ import org.springframework.http.HttpMethod;
import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.MessageDigestPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.oauth2.server.resource.web.BearerTokenAuthenticationEntryPoint;
import org.springframework.security.oauth2.server.resource.web.access.BearerTokenAccessDeniedHandler;
@@ -42,8 +42,9 @@ public class SecurityConfiguration {
}
@Bean
@SuppressWarnings("deprecation")
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
return new MessageDigestPasswordEncoder("SHA-256");
}
@Bean
@@ -43,8 +43,8 @@ public class User extends AbstractAuditingEntity<Long> implements Serializable {
@JsonIgnore
@NotNull
@Size(min = 60, max = 60)
@Column(name = "password_hash", length = 60, nullable = false)
@Size(min = 60, max = 100)
@Column(name = "password_hash", length = 100, nullable = false)
private String password;
@Size(max = 50)
@@ -11,6 +11,8 @@ import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.oauth2.core.ClaimAccessor;
import org.springframework.security.oauth2.jose.jws.MacAlgorithm;
import org.springframework.security.oauth2.jwt.Jwt;
import org.springframework.security.oauth2.core.oidc.user.OidcUser;
import org.springframework.security.oauth2.core.user.OAuth2User;
/**
* Utility class for Spring Security.
@@ -42,6 +44,10 @@ public final class SecurityUtils {
return springSecurityUser.getUsername();
} else if (authentication.getPrincipal() instanceof Jwt jwt) {
return jwt.getSubject();
} else if (authentication.getPrincipal() instanceof OidcUser oidcUser) {
return oidcUser.getEmail() != null ? oidcUser.getEmail() : oidcUser.getName();
} else if (authentication.getPrincipal() instanceof OAuth2User oauth2User) {
return oauth2User.getAttribute("email") != null ? oauth2User.getAttribute("email") : oauth2User.getName();
} else if (authentication.getPrincipal() instanceof String s) {
return s;
}
@@ -231,7 +231,7 @@ public class UserService {
*/
public void updateUser(String firstName, String lastName, String email, String langKey, String imageUrl) {
SecurityUtils.getCurrentUserLogin()
.flatMap(userRepository::findOneByLogin)
.flatMap(login -> userRepository.findOneByLogin(login).or(() -> userRepository.findOneByEmailIgnoreCase(login)))
.ifPresent(user -> {
user.setFirstName(firstName);
user.setLastName(lastName);
@@ -249,7 +249,7 @@ public class UserService {
@Transactional
public void changePassword(String currentClearTextPassword, String newPassword) {
SecurityUtils.getCurrentUserLogin()
.flatMap(userRepository::findOneByLogin)
.flatMap(login -> userRepository.findOneByLogin(login).or(() -> userRepository.findOneByEmailIgnoreCase(login)))
.ifPresent(user -> {
String currentEncryptedPassword = user.getPassword();
if (!passwordEncoder.matches(currentClearTextPassword, currentEncryptedPassword)) {
@@ -279,7 +279,8 @@ public class UserService {
@Transactional(readOnly = true)
public Optional<User> getUserWithAuthorities() {
return SecurityUtils.getCurrentUserLogin().flatMap(userRepository::findOneWithAuthoritiesByLogin);
return SecurityUtils.getCurrentUserLogin()
.flatMap(login -> userRepository.findOneWithAuthoritiesByLogin(login).or(() -> userRepository.findOneWithAuthoritiesByEmailIgnoreCase(login)));
}
/**