47 lines
2.1 KiB
Java
47 lines
2.1 KiB
Java
package nl.connectedit.swiss.authentication;
|
|
|
|
import jakarta.validation.Valid;
|
|
import lombok.RequiredArgsConstructor;
|
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
|
|
import org.springframework.context.annotation.Profile;
|
|
import org.springframework.http.HttpStatus;
|
|
import org.springframework.http.ResponseEntity;
|
|
import org.springframework.security.authentication.AuthenticationManager;
|
|
import org.springframework.security.authentication.BadCredentialsException;
|
|
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
|
|
import org.springframework.security.core.userdetails.UserDetails;
|
|
import org.springframework.web.bind.annotation.CrossOrigin;
|
|
import org.springframework.web.bind.annotation.PostMapping;
|
|
import org.springframework.web.bind.annotation.RequestBody;
|
|
import org.springframework.web.bind.annotation.RestController;
|
|
import org.springframework.web.server.ResponseStatusException;
|
|
|
|
@RestController
|
|
@ConditionalOnExpression("${security}")
|
|
@RequiredArgsConstructor
|
|
@CrossOrigin
|
|
public class AuthenticationController {
|
|
|
|
private final JwtUserDetailsService jwtUserDetailsService;
|
|
|
|
private final AuthenticationManager authenticationManager;
|
|
|
|
private final JwtTokenService jwtTokenService;
|
|
|
|
@PostMapping("/authenticate")
|
|
public AuthenticationResponse authenticate(@RequestBody @Valid final AuthenticationRequest authenticationRequest) {
|
|
try {
|
|
authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(
|
|
authenticationRequest.getUsername(), authenticationRequest.getPassword()));
|
|
} catch (final BadCredentialsException ex) {
|
|
throw new ResponseStatusException(HttpStatus.UNAUTHORIZED);
|
|
}
|
|
|
|
final UserDetails userDetails = jwtUserDetailsService.loadUserByUsername(authenticationRequest.getUsername());
|
|
final AuthenticationResponse authenticationResponse = new AuthenticationResponse();
|
|
authenticationResponse.setAccessToken(jwtTokenService.generateToken(userDetails));
|
|
authenticationResponse.setUsername(authenticationRequest.getUsername());
|
|
return authenticationResponse;
|
|
}
|
|
}
|