diff --git a/sisvietnamvn_main/TestOracleJDBC.java b/sisvietnamvn_main/TestOracleJDBC.java index 5e7037ed..838c1510 100644 --- a/sisvietnamvn_main/TestOracleJDBC.java +++ b/sisvietnamvn_main/TestOracleJDBC.java @@ -1,20 +1,12 @@ -import java.sql.Connection; -import java.sql.DriverManager; -import java.sql.SQLException; +import org.springframework.security.crypto.password.MessageDigestPasswordEncoder; public class TestOracleJDBC { + @SuppressWarnings("deprecation") public static void main(String[] args) { - String jdbcUrl = "jdbc:oracle:thin:@192.168.1.15:1521/sisvietnam"; - String username = "sisvietnam"; - String password = "sisvietnam"; - - try { - Connection connection = DriverManager.getConnection(jdbcUrl, username, password); - System.out.println("Connection successful!"); - connection.close(); - } catch (SQLException e) { - System.err.println("Connection failed!"); - e.printStackTrace(); - } + MessageDigestPasswordEncoder encoder = new MessageDigestPasswordEncoder("SHA-256"); + String hash = encoder.encode("admin"); + System.out.println("Encoded hash for admin: " + hash); + boolean matches = encoder.matches("admin", "8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918"); + System.out.println("Does 'admin' match my hash? " + matches); } } diff --git a/sisvietnamvn_main/src/main/java/com/sisvietnamvn/web/config/SecurityConfiguration.java b/sisvietnamvn_main/src/main/java/com/sisvietnamvn/web/config/SecurityConfiguration.java index 9cc5848f..b1dc60b7 100644 --- a/sisvietnamvn_main/src/main/java/com/sisvietnamvn/web/config/SecurityConfiguration.java +++ b/sisvietnamvn_main/src/main/java/com/sisvietnamvn/web/config/SecurityConfiguration.java @@ -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 diff --git a/sisvietnamvn_main/src/main/java/com/sisvietnamvn/web/domain/User.java b/sisvietnamvn_main/src/main/java/com/sisvietnamvn/web/domain/User.java index e9abdefd..dd4f7398 100644 --- a/sisvietnamvn_main/src/main/java/com/sisvietnamvn/web/domain/User.java +++ b/sisvietnamvn_main/src/main/java/com/sisvietnamvn/web/domain/User.java @@ -43,8 +43,8 @@ public class User extends AbstractAuditingEntity 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) diff --git a/sisvietnamvn_main/src/main/java/com/sisvietnamvn/web/security/SecurityUtils.java b/sisvietnamvn_main/src/main/java/com/sisvietnamvn/web/security/SecurityUtils.java index 873f4e7e..f8f5d269 100644 --- a/sisvietnamvn_main/src/main/java/com/sisvietnamvn/web/security/SecurityUtils.java +++ b/sisvietnamvn_main/src/main/java/com/sisvietnamvn/web/security/SecurityUtils.java @@ -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; } diff --git a/sisvietnamvn_main/src/main/java/com/sisvietnamvn/web/service/UserService.java b/sisvietnamvn_main/src/main/java/com/sisvietnamvn/web/service/UserService.java index 7ab3e57c..965c81a1 100644 --- a/sisvietnamvn_main/src/main/java/com/sisvietnamvn/web/service/UserService.java +++ b/sisvietnamvn_main/src/main/java/com/sisvietnamvn/web/service/UserService.java @@ -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 getUserWithAuthorities() { - return SecurityUtils.getCurrentUserLogin().flatMap(userRepository::findOneWithAuthoritiesByLogin); + return SecurityUtils.getCurrentUserLogin() + .flatMap(login -> userRepository.findOneWithAuthoritiesByLogin(login).or(() -> userRepository.findOneWithAuthoritiesByEmailIgnoreCase(login))); } /** diff --git a/sisvietnamvn_main/src/main/resources/config/application-dev.yml b/sisvietnamvn_main/src/main/resources/config/application-dev.yml index 87a0f4a1..dae3ade5 100644 --- a/sisvietnamvn_main/src/main/resources/config/application-dev.yml +++ b/sisvietnamvn_main/src/main/resources/config/application-dev.yml @@ -34,7 +34,7 @@ spring: indent-output: true datasource: type: com.zaxxer.hikari.HikariDataSource - url: jdbc:oracle:thin:@localhost:1521/FREEPDB1 + url: jdbc:oracle:thin:@localhost:1521/sisvietnam username: sisvietnam password: "sisvietnam" hikari: diff --git a/sisvietnamvn_main/src/main/resources/static/login-assets/css b/sisvietnamvn_main/src/main/resources/static/login-assets/style.css similarity index 100% rename from sisvietnamvn_main/src/main/resources/static/login-assets/css rename to sisvietnamvn_main/src/main/resources/static/login-assets/style.css diff --git a/sisvietnamvn_main/src/main/resources/templates/manage/2fa/setup.html b/sisvietnamvn_main/src/main/resources/templates/manage/2fa/setup.html index a9a54a75..ba25313c 100644 --- a/sisvietnamvn_main/src/main/resources/templates/manage/2fa/setup.html +++ b/sisvietnamvn_main/src/main/resources/templates/manage/2fa/setup.html @@ -6,7 +6,7 @@ - + diff --git a/sisvietnamvn_main/src/main/resources/templates/manage/2fa/verify.html b/sisvietnamvn_main/src/main/resources/templates/manage/2fa/verify.html index 76961062..5759cc5f 100644 --- a/sisvietnamvn_main/src/main/resources/templates/manage/2fa/verify.html +++ b/sisvietnamvn_main/src/main/resources/templates/manage/2fa/verify.html @@ -6,7 +6,7 @@ - + diff --git a/sisvietnamvn_main/src/main/resources/templates/manage/login.html b/sisvietnamvn_main/src/main/resources/templates/manage/login.html index 1c511931..1056b79c 100644 --- a/sisvietnamvn_main/src/main/resources/templates/manage/login.html +++ b/sisvietnamvn_main/src/main/resources/templates/manage/login.html @@ -7,7 +7,7 @@ - +