open door working+fixes 2

This commit is contained in:
truettwo 2025-02-19 17:07:58 +03:00
parent d541a44d96
commit 9684dad527
5 changed files with 128 additions and 19 deletions

View File

@ -0,0 +1,57 @@
package com.example.nto.config;
import com.example.nto.entity.Employee;
import com.example.nto.service.EmployeeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.password.NoOpPasswordEncoder; // Для незашифрованных паролей
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import java.util.Optional;
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private EmployeeService employeeService;
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable() // Отключ CSRF
.authorizeRequests()
.antMatchers("/api/auth").permitAll() // Разрешаем доступ к /auth
.anyRequest().authenticated() // Все запросы требуют аутентификации
.and()
.httpBasic(); // Включаем базу
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService()).passwordEncoder(NoOpPasswordEncoder.getInstance());
}
@Bean
public UserDetailsService userDetailsService() {
return username -> {
Optional<Employee> employee = employeeService.findByLogin(username);
if (employee.isPresent()) {
Employee emp = employee.get();
return org.springframework.security.core.userdetails.User.withUsername(emp.getLogin())
.password(emp.getPassword())
.roles(emp.getRole())
.build();
} else {
throw new UsernameNotFoundException("User not found with login: " + username);
}
};
}
}

View File

@ -1,26 +1,42 @@
package com.example.nto.entity;
import javax.persistence.*;
import java.io.Serializable;
import javax.persistence.*;
import lombok.*;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "code")
public class Code {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private long id;
private Long value; // Значение кода
private long value;
}
// made by truettwo
@ManyToOne // Установите связь с Employee
@JoinColumn(name = "employee_id", nullable = false)
private Employee employee;
// Геттеры и сеттеры
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Long getValue() {
return value;
}
public void setValue(Long value) {
this.value = value;
}
public Employee getEmployee() {
return employee;
}
public void setEmployee(Employee employee) {
this.employee = employee;
}
}

View File

@ -27,5 +27,27 @@ public class Employee {
private String role;
public String getLogin() {
return login; // Возвращает логин
}
public void setRole(String role) {
this.role = role; // Устанавливает роль
}
public String getRole() {
return role; // Возвращает роль (например, 'admin' или 'user')
}
public void setPassword(String password) {
this.password = password; // Устанавливает пароль
}
public String getPassword() {
return password; // Возвращает пароль
}
}

View File

@ -2,7 +2,14 @@ package com.example.nto.repository;
import com.example.nto.entity.Code;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import java.util.List;
public interface CodeRepository extends JpaRepository<Code, Long> {
// Метод для поиска кодов по логину
@Query("SELECT c.value FROM Code c WHERE c.employee.login = :login")
List<Long> findCodesByLogin(@Param("login") String login);
}

View File

@ -33,9 +33,16 @@ public class EmployeeServiceImpl implements EmployeeService {
@Override
public boolean validateCode(String login, long code) {
// Получаем все коды из репозитория
return codeRepository.findAll()
.stream()
.anyMatch(c -> c.getValue() == code); // Проверяем, есть ли код
// Получаем все коды для данного логина
List<Long> validCodes = codeRepository.findCodesByLogin(login); // Теперь вызывается из объекта
// Проверяем, если переданный код присутствует в списке
boolean isValid = validCodes.contains(code);
// Вывод отладочной информации
System.out.println("Valid codes: " + validCodes);
System.out.println("Input code: " + code);
return isValid;
}
}