package com.pollex.pam.web.rest;
|
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
import com.pollex.pam.security.jwt.JWTFilter;
|
import com.pollex.pam.security.jwt.TokenProvider;
|
import com.pollex.pam.business.web.vm.LoginVM;
|
import javax.validation.Valid;
|
import org.springframework.http.HttpHeaders;
|
import org.springframework.http.HttpStatus;
|
import org.springframework.http.ResponseEntity;
|
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
|
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
|
import org.springframework.security.core.Authentication;
|
import org.springframework.security.core.context.SecurityContextHolder;
|
import org.springframework.web.bind.annotation.*;
|
|
/**
|
* Controller to authenticate users.
|
*/
|
@RestController
|
@RequestMapping("/api")
|
public class UserJWTController {
|
|
private final TokenProvider tokenProvider;
|
|
private final AuthenticationManagerBuilder authenticationManagerBuilder;
|
|
public UserJWTController(TokenProvider tokenProvider, AuthenticationManagerBuilder authenticationManagerBuilder) {
|
this.tokenProvider = tokenProvider;
|
this.authenticationManagerBuilder = authenticationManagerBuilder;
|
}
|
|
@PostMapping("/authenticate")
|
public ResponseEntity<JWTToken> authorize(@Valid @RequestBody LoginVM loginVM) {
|
UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(
|
loginVM.getUsername(),
|
loginVM.getPassword()
|
);
|
|
Authentication authentication = authenticationManagerBuilder.getObject().authenticate(authenticationToken);
|
SecurityContextHolder.getContext().setAuthentication(authentication);
|
String jwt = tokenProvider.createToken(authentication, loginVM.isRememberMe());
|
HttpHeaders httpHeaders = new HttpHeaders();
|
httpHeaders.add(JWTFilter.AUTHORIZATION_HEADER, "Bearer " + jwt);
|
return new ResponseEntity<>(new JWTToken(jwt), httpHeaders, HttpStatus.OK);
|
}
|
|
/**
|
* Object to return as body in JWT Authentication.
|
*/
|
static class JWTToken {
|
|
private String idToken;
|
|
JWTToken(String idToken) {
|
this.idToken = idToken;
|
}
|
|
@JsonProperty("id_token")
|
String getIdToken() {
|
return idToken;
|
}
|
|
void setIdToken(String idToken) {
|
this.idToken = idToken;
|
}
|
}
|
}
|