auth added

This commit is contained in:
agavrilov 2025-02-20 10:36:01 +03:00 committed by SunZar
parent dcfa2f0cac
commit a64063fcf0
9 changed files with 63 additions and 22 deletions

View File

@ -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();
}
}

View File

@ -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<PassingDTO> getPassingByUsername(@PathVariable String username) {
return ResponseEntity.ok(passingService.getPassingByUsername(username));
public List<PassingDTO> 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<PassingDTO> createPassing(@RequestBody PassingDTO dto) {
// return ResponseEntity.ok
// }
}

View File

@ -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;

View File

@ -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;
}
}

View File

@ -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<Passing, Long> {
Optional<Passing> findByUsername(String login);
List<Passing> findByUsername(String login);
@Override
Page<Passing> findAll(Pageable pageable);

View File

@ -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<PassingDTO> getPassingByUsername(String username);
Page<PassingDTO> getAllPassingPaginated(Pageable pageable);
PassingDTO createPassing(PassingDTO dto);
}

View File

@ -8,4 +8,6 @@ public interface UserService {
UserDTO getUserInfoByUsername(String username);
UserDTO patchUserByUsername(String username);
}

View File

@ -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<PassingDTO> 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<PassingDTO> 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));
}
}

View File

@ -1,4 +1,5 @@
username;type;time;code
pivanov;Карта;12:00;1234567890123456789
ipetrov;Вход со смартфона;13:00;9223372036854775807
asemenov;Карта;10:00;1234567890123456789
asemenov;Карта;10:00;1234567890123456789
pivanov;Вход со смартфона;15:00;1234567890123456789

1 username type time code
2 pivanov Карта 12:00 1234567890123456789
3 ipetrov Вход со смартфона 13:00 9223372036854775807
4 asemenov Карта 10:00 1234567890123456789
5 pivanov Вход со смартфона 15:00 1234567890123456789