Changeset bf28e50


Ignore:
Timestamp:
01/27/25 18:06:49 (3 months ago)
Author:
ivanov1332 <zareivanov070@…>
Branches:
master
Children:
0f3afae
Parents:
840887f
Message:

Fixed problem with security

Location:
ReserveNGo-backend
Files:
12 edited

Legend:

Unmodified
Added
Removed
  • ReserveNGo-backend/.gitignore

    r840887f rbf28e50  
    1515
    1616### IntelliJ IDEA ###
    17 .idea/
     17.idea
    1818*.iws
    1919*.iml
  • ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/config/WebSecurityConfig.java

    r840887f rbf28e50  
    1313import org.springframework.security.web.SecurityFilterChain;
    1414import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
     15import org.springframework.web.servlet.config.annotation.CorsRegistry;
     16import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
    1517
    1618@Configuration
     
    3537                .authorizeHttpRequests((requests) -> requests
    3638                        .requestMatchers(
    37                                 "/api/auth/**",
     39                                "/api/**",
    3840                                "/h2/**",
    39                                 "/api/locals/**",
    4041                                "/favicon.ico")
    4142                        .permitAll()
    42                         .requestMatchers("/api/customer/**").hasRole("CUSTOMER")
    43                         .requestMatchers("/api/admin/**").hasRole("ADMIN")
    4443                        .anyRequest()
    4544                        .authenticated()
     
    5352        return http.build();
    5453    }
     54
     55    @Bean
     56    public WebMvcConfigurer corsConfigurer() {
     57        return new WebMvcConfigurer() {
     58            @Override
     59            public void addCorsMappings(CorsRegistry registry) {
     60                registry.addMapping("/**")
     61                        .allowedOrigins("http://localhost:5173")
     62                        .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
     63                        .allowedHeaders("*")
     64                        .allowCredentials(true);
     65            }
     66        };
     67    }
     68
    5569}
  • ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/config/filter/JWTAuthenticationFilter.java

    r840887f rbf28e50  
    3636        final String userEmail;
    3737
    38         System.out.println(request);
    39         System.out.println(authHeader);
    40 
    4138        if (authHeader == null || !authHeader.startsWith("Bearer ")) {
    4239            filterChain.doFilter(request, response);
  • ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/model/Customer.java

    r840887f rbf28e50  
    11package mk.ukim.finki.it.reservengo.model;
    22
    3 import jakarta.persistence.CascadeType;
    4 import jakarta.persistence.Entity;
    5 import jakarta.persistence.OneToMany;
     3import jakarta.persistence.*;
    64import lombok.EqualsAndHashCode;
    75import mk.ukim.finki.it.reservengo.model.enumerations.Role;
     
    119@EqualsAndHashCode(callSuper = true)
    1210@Entity
     11
    1312public class Customer extends User {
    1413    public Customer(String firstName, String lastName, String email, String password, String phoneNumber, Role userRole) {
     
    2221    private List<Reservation> reservations;
    2322
    24     @OneToMany
     23    @ManyToMany
    2524    private List<Local> favouriteLocals;
    2625
  • ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/AuthServiceImpl.java

    r840887f rbf28e50  
    3939        Customer customer = new Customer(firstName, lastName, email, passwordEncoder.encode(password), phoneNumber, Role.ROLE_CUSTOMER);
    4040        customerRepository.save(customer);
    41         String jwt = jwtService.generateTokenNoClaims(customer);
     41        String jwt = jwtService.generateToken(customer);
    4242
    4343        return new JWTAuthenticationResponse(
     
    5555        LocalWorker localWorker = new LocalWorker(firstName, lastName, email, passwordEncoder.encode(password), phoneNumber, Role.ROLE_LOCAL_WORKER);
    5656        localWorkerRepository.save(localWorker);
    57         String jwt = jwtService.generateTokenNoClaims(localWorker);
     57        String jwt = jwtService.generateToken(localWorker);
    5858
    5959        return new JWTAuthenticationResponse(
     
    7171        LocalManager localManager = new LocalManager(firstName, lastName, email, passwordEncoder.encode(password), phoneNumber, Role.ROLE_LOCAL_MANAGER);
    7272        localManagerRepository.save(localManager);
    73         String jwt = jwtService.generateTokenNoClaims(localManager);
     73        String jwt = jwtService.generateToken(localManager);
    7474
    7575        return new JWTAuthenticationResponse(
     
    8787        authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(email, password));
    8888        User user = userRepository.findByEmail(email).orElseThrow(() -> new EmailNotFoundException(email));
    89         String jwt = jwtService.generateTokenNoClaims(user);
     89        String jwt = jwtService.generateToken(user);
    9090
    9191        return new JWTAuthenticationResponse(
  • ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/JWTServiceImpl.java

    r840887f rbf28e50  
    66import io.jsonwebtoken.io.Decoders;
    77import io.jsonwebtoken.security.Keys;
     8import mk.ukim.finki.it.reservengo.model.User;
    89import mk.ukim.finki.it.reservengo.service.intf.JWTService;
    910import org.springframework.security.core.userdetails.UserDetails;
     
    1213import java.security.Key;
    1314import java.util.Date;
    14 import java.util.HashMap;
    15 import java.util.Map;
    1615import java.util.function.Function;
    1716
     
    4847
    4948    @Override
    50     public String generateToken(Map<String, Object> extraClaims, UserDetails userDetails) {
    51 
    52         return Jwts
    53                 .builder()
    54                 .setClaims(extraClaims)
    55                 .setSubject(userDetails.getUsername())
    56                 .setIssuedAt(new Date(System.currentTimeMillis()))
     49    public String generateToken(User user) {
     50        return Jwts.builder().setSubject(user.getUsername())
     51                .claim("name", user.getFirstName())
     52                .claim("role", user.getUserRole())
     53                .claim("id", user.getId())
     54                .setIssuedAt(new Date())
    5755                .setExpiration(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 24))
    5856                .signWith(getSignInKey(), SignatureAlgorithm.HS256)
    5957                .compact();
    60     }
    61 
    62     @Override
    63     public String generateTokenNoClaims(UserDetails userDetails) {
    64         return generateToken(new HashMap<>(), userDetails);
    6558    }
    6659
  • ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/intf/JWTService.java

    r840887f rbf28e50  
    22
    33import io.jsonwebtoken.Claims;
     4import mk.ukim.finki.it.reservengo.model.User;
    45import org.springframework.security.core.userdetails.UserDetails;
    56
    67import java.security.Key;
    78import java.util.Date;
    8 import java.util.Map;
    99import java.util.function.Function;
    1010
    1111public interface JWTService {
     12    String generateToken(User user);
     13
    1214    String extractUsername(String token);
    1315
     
    1820    <T> T extractClaim(String token, Function<Claims, T> claimsResolver);
    1921
    20     String generateToken(Map<String, Object> extraClaims, UserDetails userDetails);
    21 
    22     String generateTokenNoClaims(UserDetails userDetails);
    23 
    2422    boolean isTokenValid(String token, UserDetails userDetails);
    2523
  • ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/web/AdminController.java

    r840887f rbf28e50  
    33import mk.ukim.finki.it.reservengo.service.intf.AdminService;
    44import org.springframework.http.ResponseEntity;
     5import org.springframework.security.access.prepost.PreAuthorize;
    56import org.springframework.web.bind.annotation.*;
    67
    78@RestController
    89@RequestMapping("/api/admin")
    9 @CrossOrigin(origins = "*")
     10@PreAuthorize("hasRole('ADMIN')")
    1011public class AdminController {
    1112
     
    1920    public ResponseEntity<?> addLocal(@RequestParam String name) {
    2021        adminService.addLocal(name);
    21         return ResponseEntity.ok().build(); // optional if you want to return something after adding
     22        return ResponseEntity.ok().build();
    2223    }
    2324
     
    2526    public ResponseEntity<?> deleteLocal(@PathVariable Long id) {
    2627        adminService.deleteLocal(id);
    27         return ResponseEntity.ok().build(); // optional if you want to return something after deleting
     28        return ResponseEntity.ok().build();
    2829    }
    2930}
  • ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/web/AuthController.java

    r840887f rbf28e50  
    1010@RestController
    1111@RequestMapping("/api/auth")
    12 @CrossOrigin(origins = "*")
    1312public class AuthController {
    1413    private final AuthService authenticationService;
  • ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/web/CustomerController.java

    r840887f rbf28e50  
    88import mk.ukim.finki.it.reservengo.service.intf.ReservationService;
    99import org.springframework.http.ResponseEntity;
     10import org.springframework.security.access.prepost.PreAuthorize;
    1011import org.springframework.security.core.annotation.AuthenticationPrincipal;
    1112import org.springframework.web.bind.annotation.*;
     
    1516@RestController
    1617@RequestMapping("/api/customer")
    17 @CrossOrigin(origins = "*")
     18@PreAuthorize("hasRole('CUSTOMER')")
    1819public class CustomerController {
    1920
     
    4041    @GetMapping("/favourite-locals")
    4142    public ResponseEntity<?> listFavouriteLocals(@AuthenticationPrincipal User user) {
    42         System.out.println("tuka");
    43         System.out.println(user);
    4443        List<Local> favouriteLocals = customerService.listFavouriteLocals(user.getId());
    4544        return ResponseEntity.ok(favouriteLocals);
  • ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/web/LocalController.java

    r840887f rbf28e50  
    88@RestController
    99@RequestMapping("/api/locals")
    10 @CrossOrigin("*")
    1110public class LocalController {
    1211
  • ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/web/ReservationController.java

    r840887f rbf28e50  
    99@RestController
    1010@RequestMapping("/api")
    11 @CrossOrigin("*")
    1211public class ReservationController {
    1312    private final ReservationService reservationService;
Note: See TracChangeset for help on using the changeset viewer.