From a64063fcf01b0a0d96f88084b03903fdd1ef4da3 Mon Sep 17 00:00:00 2001 From: agavrilov Date: Thu, 20 Feb 2025 10:36:01 +0300 Subject: [PATCH] auth added --- .../org/example/config/WebSecurityConfig.java | 26 ++++++++++++++----- .../example/controller/UserController.java | 11 ++++++-- src/main/java/org/example/dto/PassingDTO.java | 2 +- src/main/java/org/example/entity/User.java | 12 +++------ .../example/repository/PassingRepository.java | 3 ++- .../org/example/service/PassingService.java | 6 ++++- .../java/org/example/service/UserService.java | 2 ++ .../service/impl/PassingServiceImpl.java | 20 ++++++++++++-- .../csv/2025-02-19--0004-passing-data.csv | 3 ++- 9 files changed, 63 insertions(+), 22 deletions(-) diff --git a/src/main/java/org/example/config/WebSecurityConfig.java b/src/main/java/org/example/config/WebSecurityConfig.java index de05fb4..131ede6 100644 --- a/src/main/java/org/example/config/WebSecurityConfig.java +++ b/src/main/java/org/example/config/WebSecurityConfig.java @@ -1,11 +1,13 @@ package org.example.config; import lombok.RequiredArgsConstructor; +import org.example.service.UserService; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.security.authentication.AuthenticationManager; 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.WebSecurityConfiguration; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; @@ -23,11 +25,14 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { http .csrf().disable() .authorizeRequests() - .antMatchers("/api/**").permitAll() -// .antMatchers("api/{username}/passing").hasAuthority("ROLE_ADMIN") -// .antMatchers("api/{username}/**").hasAnyAuthority("ROLE_USER", "ROLE_ADMIN") + .antMatchers("/h2-console/**").permitAll() + .antMatchers("api/{username}/passing").hasAuthority("ROLE_ADMIN") + .antMatchers("api/{username}/**").hasAnyAuthority("ROLE_USER", "ROLE_ADMIN") .anyRequest().authenticated() - .and().httpBasic().and().headers().frameOptions().disable(); + .and() + .httpBasic() + .and() + .headers().frameOptions().disable(); } @Override @@ -35,7 +40,16 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder()); } - private PasswordEncoder passwordEncoder() { + @Bean + public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } + + @Bean + public AuthenticationManager authenticationManager(HttpSecurity http, UserService personDetailsService) throws Exception { + return http.getSharedObject(AuthenticationManagerBuilder.class) + .userDetailsService(userDetailsService) + .and() + .build(); + } } diff --git a/src/main/java/org/example/controller/UserController.java b/src/main/java/org/example/controller/UserController.java index 1259ec0..c7bcabf 100644 --- a/src/main/java/org/example/controller/UserController.java +++ b/src/main/java/org/example/controller/UserController.java @@ -11,6 +11,8 @@ import org.springframework.data.domain.Pageable; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +import java.util.List; + @RestController @RequestMapping("api/{username}") @RequiredArgsConstructor @@ -37,8 +39,8 @@ public class UserController { } @GetMapping("/passing") - public ResponseEntity getPassingByUsername(@PathVariable String username) { - return ResponseEntity.ok(passingService.getPassingByUsername(username)); + public List getPassingByUsername(@PathVariable String username) { + return passingService.getPassingByUsername(username); } @GetMapping("/passing/paginated") @@ -48,4 +50,9 @@ public class UserController { Pageable pageable = PageRequest.of(page, size); return ResponseEntity.ok(passingService.getAllPassingPaginated(pageable)); } + +// @PostMapping("/passing/new") +// public ResponseEntity createPassing(@RequestBody PassingDTO dto) { +// return ResponseEntity.ok +// } } diff --git a/src/main/java/org/example/dto/PassingDTO.java b/src/main/java/org/example/dto/PassingDTO.java index fa3cf39..8098f80 100644 --- a/src/main/java/org/example/dto/PassingDTO.java +++ b/src/main/java/org/example/dto/PassingDTO.java @@ -6,7 +6,7 @@ import org.hibernate.mapping.Set; @Data public class PassingDTO { private Long id; - private String Username; + private String username; private String type; private String time; private Long code; diff --git a/src/main/java/org/example/entity/User.java b/src/main/java/org/example/entity/User.java index 723194c..0a6fd8e 100644 --- a/src/main/java/org/example/entity/User.java +++ b/src/main/java/org/example/entity/User.java @@ -41,27 +41,23 @@ public class User implements UserDetails{ return List.of(); } - @Override public boolean isAccountNonExpired() { - return false; + return true; } @Override public boolean isAccountNonLocked() { - return false; + return true; } @Override public boolean isCredentialsNonExpired() { - return false; + return true; } @Override public boolean isEnabled() { - return false; + return true; } - - - } diff --git a/src/main/java/org/example/repository/PassingRepository.java b/src/main/java/org/example/repository/PassingRepository.java index 12e34d3..de80ec6 100644 --- a/src/main/java/org/example/repository/PassingRepository.java +++ b/src/main/java/org/example/repository/PassingRepository.java @@ -5,10 +5,11 @@ import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; +import java.util.List; import java.util.Optional; public interface PassingRepository extends JpaRepository { - Optional findByUsername(String login); + List findByUsername(String login); @Override Page findAll(Pageable pageable); diff --git a/src/main/java/org/example/service/PassingService.java b/src/main/java/org/example/service/PassingService.java index fba4489..51577d7 100644 --- a/src/main/java/org/example/service/PassingService.java +++ b/src/main/java/org/example/service/PassingService.java @@ -4,8 +4,12 @@ import org.example.dto.PassingDTO; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; +import java.util.List; + public interface PassingService { - PassingDTO getPassingByUsername(String username); + List getPassingByUsername(String username); Page getAllPassingPaginated(Pageable pageable); + + PassingDTO createPassing(PassingDTO dto); } diff --git a/src/main/java/org/example/service/UserService.java b/src/main/java/org/example/service/UserService.java index c70c162..82f21fe 100644 --- a/src/main/java/org/example/service/UserService.java +++ b/src/main/java/org/example/service/UserService.java @@ -8,4 +8,6 @@ public interface UserService { UserDTO getUserInfoByUsername(String username); UserDTO patchUserByUsername(String username); + + } diff --git a/src/main/java/org/example/service/impl/PassingServiceImpl.java b/src/main/java/org/example/service/impl/PassingServiceImpl.java index df265df..06cea0f 100644 --- a/src/main/java/org/example/service/impl/PassingServiceImpl.java +++ b/src/main/java/org/example/service/impl/PassingServiceImpl.java @@ -2,6 +2,7 @@ package org.example.service.impl; import lombok.RequiredArgsConstructor; import org.example.dto.PassingDTO; +import org.example.entity.Passing; import org.example.exception.UserNotFoundException; import org.example.repository.PassingRepository; import org.example.service.PassingService; @@ -10,13 +11,16 @@ import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; +import java.util.List; +import java.util.stream.Collectors; + @Service @RequiredArgsConstructor public class PassingServiceImpl implements PassingService { private final PassingRepository passingRepository; @Override - public PassingDTO getPassingByUsername(String Username) { - return passingRepository.findByUsername(Username).map(PassingMapper::convertToDto).orElseThrow(() -> new UserNotFoundException("Посещения не найдены")); + public List getPassingByUsername(String Username) { + return passingRepository.findByUsername(Username).stream().map(PassingMapper::convertToDto).collect(Collectors.toList()); } @@ -24,4 +28,16 @@ public class PassingServiceImpl implements PassingService { public Page getAllPassingPaginated(Pageable pageable) { return passingRepository.findAll(pageable).map(PassingMapper::convertToDto); } + + @Override + public PassingDTO createPassing(PassingDTO dto) { + Passing passing = new Passing(); + passing.setId(dto.getId()); + passing.setUsername(dto.getUsername()); + passing.setType(dto.getType()); + passing.setTime(dto.getType()); + passing.setCode(dto.getCode()); + + return PassingMapper.convertToDto(passingRepository.save(passing)); + } } diff --git a/src/main/resources/db.changelog/data/csv/2025-02-19--0004-passing-data.csv b/src/main/resources/db.changelog/data/csv/2025-02-19--0004-passing-data.csv index 77bb0bb..05cf7c1 100644 --- a/src/main/resources/db.changelog/data/csv/2025-02-19--0004-passing-data.csv +++ b/src/main/resources/db.changelog/data/csv/2025-02-19--0004-passing-data.csv @@ -1,4 +1,5 @@ username;type;time;code pivanov;Карта;12:00;1234567890123456789 ipetrov;Вход со смартфона;13:00;9223372036854775807 -asemenov;Карта;10:00;1234567890123456789 \ No newline at end of file +asemenov;Карта;10:00;1234567890123456789 +pivanov;Вход со смартфона;15:00;1234567890123456789