diff --git a/src/main/java/com/example/nto/config/SecurityConfig.java b/src/main/java/com/example/nto/config/SecurityConfig.java index 8eff956..f5c5c70 100644 --- a/src/main/java/com/example/nto/config/SecurityConfig.java +++ b/src/main/java/com/example/nto/config/SecurityConfig.java @@ -1,29 +1,43 @@ package com.example.nto.config; +import com.example.nto.service.impl.H2UserDetailsService; +import lombok.RequiredArgsConstructor; +import org.springframework.boot.context.properties.EnableConfigurationProperties; 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.config.http.SessionCreationPolicy; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; -import org.springframework.security.web.SecurityFilterChain; -@EnableWebSecurity @Configuration -public class SecurityConfig { +@RequiredArgsConstructor +@EnableConfigurationProperties +public class SecurityConfig extends WebSecurityConfigurerAdapter { + private final H2UserDetailsService h2UserDetailsService; + @Bean public BCryptPasswordEncoder bCryptPasswordEncoder() { return new BCryptPasswordEncoder(13); } - @Bean - public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { + @Override + public void configure(HttpSecurity http) throws Exception { http .csrf().disable() .authorizeRequests() .antMatchers("/api/auth").permitAll() .antMatchers("/api/info").hasRole("Admin") .antMatchers("/api/open").authenticated() - .anyRequest().authenticated(); - return http.build(); + .anyRequest().authenticated() + .and().httpBasic() + .and().sessionManagement().disable(); + } + + @Override + public void configure(AuthenticationManagerBuilder builder) + throws Exception { + builder.userDetailsService(h2UserDetailsService); } } diff --git a/src/main/java/com/example/nto/controller/EmployeeController.java b/src/main/java/com/example/nto/controller/EmployeeController.java index 30ed598..a5d7f99 100644 --- a/src/main/java/com/example/nto/controller/EmployeeController.java +++ b/src/main/java/com/example/nto/controller/EmployeeController.java @@ -14,7 +14,7 @@ import org.springframework.web.bind.annotation.*; public class EmployeeController { private final EmployeeService employeeService; - @GetMapping("/auth") + @PostMapping("/auth") @ResponseStatus(HttpStatus.OK) public void auth(@RequestBody String login, @RequestBody String password) { employeeService.checkEmployee(login, password); diff --git a/src/main/java/com/example/nto/entity/Employee.java b/src/main/java/com/example/nto/entity/Employee.java index 53e483c..b8cab36 100644 --- a/src/main/java/com/example/nto/entity/Employee.java +++ b/src/main/java/com/example/nto/entity/Employee.java @@ -22,8 +22,8 @@ public class Employee { private String login; @Column(name = "password") private String password; - @Column(name = "isAdmin") - private Boolean isAdmin; + @Column(name = "role") + private String role; @Column(name = "name") private String name; @Column(name = "photo") diff --git a/src/main/java/com/example/nto/service/impl/EmployeeServiceImpl.java b/src/main/java/com/example/nto/service/impl/EmployeeServiceImpl.java index 518837a..5a7c2f9 100644 --- a/src/main/java/com/example/nto/service/impl/EmployeeServiceImpl.java +++ b/src/main/java/com/example/nto/service/impl/EmployeeServiceImpl.java @@ -50,5 +50,7 @@ public class EmployeeServiceImpl implements EmployeeService { if (codeList.isEmpty()) { throw new IncorrectBodyException("incorrect body"); } + + } } diff --git a/src/main/java/com/example/nto/service/impl/H2UserDetailsService.java b/src/main/java/com/example/nto/service/impl/H2UserDetailsService.java new file mode 100644 index 0000000..04eb0dc --- /dev/null +++ b/src/main/java/com/example/nto/service/impl/H2UserDetailsService.java @@ -0,0 +1,32 @@ +package com.example.nto.service.impl; + +import com.example.nto.entity.Employee; +import com.example.nto.exception.NoSuchEmployeeException; +import com.example.nto.repository.EmployeeRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.security.core.userdetails.User; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component +@RequiredArgsConstructor +public class H2UserDetailsService implements UserDetailsService { + private final EmployeeRepository employeeRepository; + + @Override + public UserDetails loadUserByUsername(String username) throws NoSuchEmployeeException { + List employees = employeeRepository.findByLogin(username); + + if(employees == null) { + throw new NoSuchEmployeeException("User not found"); + } + Employee employee = employees.get(0); + List authorities = List.of(new SimpleGrantedAuthority(employee.getRole())); + + return new User(employee.getLogin(), employee.getPassword(), authorities); + } +} \ No newline at end of file diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 112d061..2309986 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -3,12 +3,16 @@ spring: # 10.6.66.117 datasource: - url: jdbc:h2:mem:testdb + url: jdbc:h2:mem:data + username: root + password: h2: console: #enabled: false enabled: true + settings: + web-allow-others: true jpa: #generate-ddl: false @@ -30,8 +34,6 @@ spring: operationsSorter: method security: - basic: - enable: false user: name: root - password: root \ No newline at end of file + password: $2y$13$YSDWkm2eCjXPOJg2TXETD.AyQRE2JxXgIrGcNJEqF1ppx.cBLRdNW \ No newline at end of file diff --git a/src/main/resources/data.sql b/src/main/resources/data.sql index 41fa01a..cd7327b 100644 --- a/src/main/resources/data.sql +++ b/src/main/resources/data.sql @@ -1,27 +1,27 @@ -INSERT INTO employee (id, login, password, name, photo, position, last_visit, is_admin) +INSERT INTO employee (id, login, password, name, photo, position, last_visit, role) VALUES -(1, 'pivanov', '$2a$13$XIDSGI7yCy8w4U2UlMVoQeTbQ18EQR.Pm1PExrGq4JkW5wDwdnu26', 'Иванов Петр Федорович', 'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg', 'Разработчик', '2024-02-12T08:30', false), -(2, 'ipetrov', '$2a$13$Fpi5mPSNgz.PAeKXmHYBEuutZBgmNdM4fHJFGJbh2AtpLrSmsm2yO', 'Петров Иван Константинович', 'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg', 'Аналитик', '2024-02-13T02:35', false), -(3, 'asemenov', '$2a$13$qjWp94aryBy4nJwYZkgN5uwj6VlU76f1OjezyeVunkwVMAVvvtUGG', 'Семенов Анатолий Анатольевич', 'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg', 'Разработчик', '2024-02-13T08:31', true), -(4, 'afedorov', '$2a$13$sKN9jIo/xvGo37YuUUpHkO03yrmODw1PvFRytxu.i.QxLqLR7O7q6', 'Федоров Александр Сергеевич', 'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg', 'Тестировщик', '2024-02-12T08:36', true), -(5, 'dfrolov', '$2y$13$R.c0njPlR9ZvpsU.2uHA0enJEUoXgE2Y838XaMFSewXCfkyhkxMuK', 'Фролов Данила Сергеевич', 'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg', 'Программист', '2024-02-12T08:50', false), -(6, 'emalakhova', '$$2y$13$QZMJ3cSJKSjCiJVttlQQ4ud2.RM..gKjUM8X4GEHPxgoM1E7w6sNW', 'Малахова Елена Алексеевна', 'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg', 'Аналитик', '2024-02-13T18:45', false), -(7, 'kplazinich', '$2y$13$u6EVJQMUzTrt.bf3RbuTkOjHt6jHBshnX.sKlCAz3VVog/Dhm2GpK', 'Плазинич Катарина Митрофановна', 'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg', 'Разработчик', '2024-02-13T08:31', true), -(8, 'apavlova', '$2y$13$bTWP3pzJOkbSdUEC4tT/tey.uJaJ5j3WTGCt2ei0Axotu6V0m4bcq', 'Павлова Анна Вячеславовна', 'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg', 'Разработчик', '2024-02-12T08:36', true), -(9, 'vpopova', '$2y$13$Y/VBGpUDgG6uh7gmmLgb2OWHu/NSeSSJ.iaOGIgV8ty/bv6kgffqm', 'Попова Виктория Павловна', 'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg', 'Дизайнер', '2024-02-12T08:30', false), -(10, 'psmirnov', '$2y$13$hatikRKXEcisfXOpuOR8HeKpO.ogBcsjpqqiNNr7q.D7bwxYd3qdG', 'Смирнов Павел Олегович', 'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg', 'Аналитик', '2024-02-13T08:35', false), -(11, 'oorlova', '$2y$13$nw4h8FKawbWBMMIvZbLyWOTBHT61Ki83pCP3sI5PCa0XKdIe7vPW.', 'Орлова Ольга Виссарионовна', 'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg', 'Разработчик', '2024-03-13T06:31', true), -(12, 'ppaveletskiy', '$2y$13$NeBU9beHyj4CnT9hfC0m/edqL6aJOv8WDbhzoJJ.uvU8rUyarxjvO', 'Павелецкий Пётр Иванович', 'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg', 'Тестировщик', '2024-02-12T08:36', true), -(13, 'isinyakov', '$2y$13$oKK0VIpyFn.SMtzJbKFpA.4y6Th8FLuAfrpfk35e0slVAL1CsR0Au', 'Синяков Иван Семенович', 'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg', 'SMMщик', '2024-02-13T08:35', false), -(14, 'azhidkovsky', '$2y$13$9chkHsL2J05WVd0qdSPujODZDCLSwP2a7tm74CFqXnesAAKpwjd.y', 'Жидковский Алексей Данилович', 'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg', 'Разработчик', '2024-02-13T08:31', true), -(15, 'fpupkin', '$2y$13$4havKLBROje2ZAdL1568Ne7RIH/dDXTiyvP1i77uvGalDjiVoNQTm', 'Пупкин Федор Дмитриевич', 'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg', 'Сис-Админ', '2024-02-12T08:36', true), -(16, 'eromanova', '$2y$13$x9VXfQF76fILjwt5sPt2IerTeDs3CgwLfJlIzHN5aPmA5Hwie.FVu', 'Романова Екатерина Ивановна', 'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg', 'Аналитик', '2024-02-13T08:35', false), -(17, 'rpushkin', '$2y$13$LyHbrXLAIhsaitxD9vKkruLaSAyAt8TLjbcx1v349XuYHLiNpBy5G', 'Пушкин Роман Андреевич', 'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg', 'Дизайнер', '2024-02-13T09:31', true), -(18, 'emunts', '$2y$13$Yr/CWqF6uptFP0hdophrze5kkfFy4L1F4NLsxNeCpaIAX7m8q66Pa', 'Мунц Ерофей Борисович', 'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg', 'Разработчик', '2024-02-12T08:36', true), -(19, 'vsergienko', '$2y$13$HBUhNaLCe8e7.4ly3LPoGuBxPULdQctm6fbYRrEqA0V.nwZjzav1i', 'Сергиенко Варфоломей Павлович', 'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg', 'Разработчик', '2024-03-12T01:30', false), -(20, 'ppivovarov', '$2y$13$ftx1tjWPkdBkoSS2NYfVuO/WwS65WyP5KpBdIidWCXSH1KgcOS.Q6', 'Пивоваров Петр Петрович', 'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg', 'Аналитик', '2024-02-13T08:34', false), -(21, 'sfedorov', '$2y$13$ggEXX8qCbmM3cjZxf9w2au6fpTNxw4yQti/zpw4asRQHV2E64Pnhq', 'Федоров Сергей Эдуардович', 'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg', 'Разработчик', '2024-02-13T12:31', true), -(22, 'tplesetskiy', '$2y$13$lzB2QhxMCPuSDT14nqV2tOBpQzhX2KLq9IcwoNU6Cw6.NGnfrTIQa', 'Плесецкий Тимур Никитович', 'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg', 'Арт-директор', '2024-02-12T08:56', true); +(1, 'pivanov', '$2a$13$XIDSGI7yCy8w4U2UlMVoQeTbQ18EQR.Pm1PExrGq4JkW5wDwdnu26', 'Иванов Петр Федорович', 'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg', 'Разработчик', '2024-02-12T08:30', 'Employee'), +(2, 'ipetrov', '$2a$13$Fpi5mPSNgz.PAeKXmHYBEuutZBgmNdM4fHJFGJbh2AtpLrSmsm2yO', 'Петров Иван Константинович', 'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg', 'Аналитик', '2024-02-13T02:35', 'Employee'), +(3, 'asemenov', '$2a$13$qjWp94aryBy4nJwYZkgN5uwj6VlU76f1OjezyeVunkwVMAVvvtUGG', 'Семенов Анатолий Анатольевич', 'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg', 'Разработчик', '2024-02-13T08:31', 'Employee'), +(4, 'afedorov', '$2a$13$sKN9jIo/xvGo37YuUUpHkO03yrmODw1PvFRytxu.i.QxLqLR7O7q6', 'Федоров Александр Сергеевич', 'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg', 'Тестировщик', '2024-02-12T08:36', 'Admin'), +(5, 'dfrolov', '$2y$13$R.c0njPlR9ZvpsU.2uHA0enJEUoXgE2Y838XaMFSewXCfkyhkxMuK', 'Фролов Данила Сергеевич', 'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg', 'Программист', '2024-02-12T08:50', 'Employee'), +(6, 'emalakhova', '$$2y$13$QZMJ3cSJKSjCiJVttlQQ4ud2.RM..gKjUM8X4GEHPxgoM1E7w6sNW', 'Малахова Елена Алексеевна', 'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg', 'Аналитик', '2024-02-13T18:45', 'Employee'), +(7, 'kplazinich', '$2y$13$u6EVJQMUzTrt.bf3RbuTkOjHt6jHBshnX.sKlCAz3VVog/Dhm2GpK', 'Плазинич Катарина Митрофановна', 'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg', 'Разработчик', '2024-02-13T08:31', 'Admin'), +(8, 'apavlova', '$2y$13$bTWP3pzJOkbSdUEC4tT/tey.uJaJ5j3WTGCt2ei0Axotu6V0m4bcq', 'Павлова Анна Вячеславовна', 'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg', 'Разработчик', '2024-02-12T08:36', 'Admin'), +(9, 'vpopova', '$2y$13$Y/VBGpUDgG6uh7gmmLgb2OWHu/NSeSSJ.iaOGIgV8ty/bv6kgffqm', 'Попова Виктория Павловна', 'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg', 'Дизайнер', '2024-02-12T08:30', 'Employee'), +(10, 'psmirnov', '$2y$13$hatikRKXEcisfXOpuOR8HeKpO.ogBcsjpqqiNNr7q.D7bwxYd3qdG', 'Смирнов Павел Олегович', 'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg', 'Аналитик', '2024-02-13T08:35', 'Employee'), +(11, 'oorlova', '$2y$13$nw4h8FKawbWBMMIvZbLyWOTBHT61Ki83pCP3sI5PCa0XKdIe7vPW.', 'Орлова Ольга Виссарионовна', 'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg', 'Разработчик', '2024-03-13T06:31', 'Employee'), +(12, 'ppaveletskiy', '$2y$13$NeBU9beHyj4CnT9hfC0m/edqL6aJOv8WDbhzoJJ.uvU8rUyarxjvO', 'Павелецкий Пётр Иванович', 'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg', 'Тестировщик', '2024-02-12T08:36', 'Admin'), +(13, 'isinyakov', '$2y$13$oKK0VIpyFn.SMtzJbKFpA.4y6Th8FLuAfrpfk35e0slVAL1CsR0Au', 'Синяков Иван Семенович', 'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg', 'SMMщик', '2024-02-13T08:35', 'Employee'), +(14, 'azhidkovsky', '$2y$13$9chkHsL2J05WVd0qdSPujODZDCLSwP2a7tm74CFqXnesAAKpwjd.y', 'Жидковский Алексей Данилович', 'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg', 'Разработчик', '2024-02-13T08:31', 'Admin'), +(15, 'fpupkin', '$2y$13$4havKLBROje2ZAdL1568Ne7RIH/dDXTiyvP1i77uvGalDjiVoNQTm', 'Пупкин Федор Дмитриевич', 'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg', 'Сис-Админ', '2024-02-12T08:36', 'Employee'), +(16, 'eromanova', '$2y$13$x9VXfQF76fILjwt5sPt2IerTeDs3CgwLfJlIzHN5aPmA5Hwie.FVu', 'Романова Екатерина Ивановна', 'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg', 'Аналитик', '2024-02-13T08:35', 'Employee'), +(17, 'rpushkin', '$2y$13$LyHbrXLAIhsaitxD9vKkruLaSAyAt8TLjbcx1v349XuYHLiNpBy5G', 'Пушкин Роман Андреевич', 'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg', 'Дизайнер', '2024-02-13T09:31', 'Employee'), +(18, 'emunts', '$2y$13$Yr/CWqF6uptFP0hdophrze5kkfFy4L1F4NLsxNeCpaIAX7m8q66Pa', 'Мунц Ерофей Борисович', 'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg', 'Разработчик', '2024-02-12T08:36', 'Admin'), +(19, 'vsergienko', '$2y$13$HBUhNaLCe8e7.4ly3LPoGuBxPULdQctm6fbYRrEqA0V.nwZjzav1i', 'Сергиенко Варфоломей Павлович', 'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg', 'Разработчик', '2024-03-12T01:30', 'Employee'), +(20, 'ppivovarov', '$2y$13$ftx1tjWPkdBkoSS2NYfVuO/WwS65WyP5KpBdIidWCXSH1KgcOS.Q6', 'Пивоваров Петр Петрович', 'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg', 'Аналитик', '2024-02-13T08:34', 'Employee'), +(21, 'sfedorov', '$2y$13$ggEXX8qCbmM3cjZxf9w2au6fpTNxw4yQti/zpw4asRQHV2E64Pnhq', 'Федоров Сергей Эдуардович', 'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg', 'Разработчик', '2024-02-13T12:31', 'Employee'), +(22, 'tplesetskiy', '$2y$13$lzB2QhxMCPuSDT14nqV2tOBpQzhX2KLq9IcwoNU6Cw6.NGnfrTIQa', 'Плесецкий Тимур Никитович', 'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg', 'Арт-директор', '2024-02-12T08:56', 'Admin'); INSERT INTO code (value) VALUES