1 package com.samsung.samserver.web.rest.service;
3 import com.fasterxml.jackson.annotation.JsonProperty;
4 import com.samsung.samserver.security.jwt.JWTConfigurer;
5 import com.samsung.samserver.security.jwt.TokenProvider;
6 import org.springframework.http.HttpHeaders;
7 import org.springframework.http.HttpStatus;
8 import org.springframework.http.ResponseEntity;
9 import org.springframework.security.authentication.AuthenticationManager;
10 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
11 import org.springframework.security.core.Authentication;
12 import org.springframework.security.core.context.SecurityContextHolder;
13 import org.springframework.stereotype.Service;
14 import org.springframework.web.bind.annotation.RequestBody;
16 import javax.validation.Valid;
17 import javax.validation.constraints.NotNull;
18 import javax.validation.constraints.Size;
21 * REST service implementation for get jwt token.
23 * @author <A HREF="mailto:m.dalakov@samsung.com">Mykhailo Dalakov</A>
27 public class UserJWTService {
29 private final TokenProvider tokenProvider;
31 private final AuthenticationManager authenticationManager;
33 public UserJWTService(TokenProvider tokenProvider, AuthenticationManager authenticationManager) {
34 this.tokenProvider = tokenProvider;
35 this.authenticationManager = authenticationManager;
38 public ResponseEntity<JWTToken> authorize(@Valid @RequestBody LoginVM loginVM) {
40 UsernamePasswordAuthenticationToken authenticationToken =
41 new UsernamePasswordAuthenticationToken(loginVM.getUsername(), loginVM.getPassword());
43 Authentication authentication = this.authenticationManager.authenticate(authenticationToken);
44 SecurityContextHolder.getContext().setAuthentication(authentication);
45 boolean rememberMe = (loginVM.isRememberMe() == null) ? false : loginVM.isRememberMe();
46 String jwt = tokenProvider.createToken(authentication, rememberMe);
47 HttpHeaders httpHeaders = new HttpHeaders();
48 httpHeaders.add(JWTConfigurer.AUTHORIZATION_HEADER, "Bearer " + jwt);
49 return new ResponseEntity<>(new JWTToken(jwt), httpHeaders, HttpStatus.OK);
54 * Object to return as body in JWT Authentication.
56 public static class JWTToken {
58 private String idToken;
60 JWTToken(String idToken) {
61 this.idToken = idToken;
64 @JsonProperty("id_token")
69 void setIdToken(String idToken) {
70 this.idToken = idToken;
76 * View Model object for storing a user's credentials.
78 public static class LoginVM {
81 @Size(min = 1, max = 50)
82 private String username;
85 @Size(min = AccountService.ManagedUserVM.PASSWORD_MIN_LENGTH, max = AccountService.ManagedUserVM.PASSWORD_MAX_LENGTH)
86 private String password;
88 private Boolean rememberMe;
90 public String getUsername() {
94 public void setUsername(String username) {
95 this.username = username;
98 public String getPassword() {
102 public void setPassword(String password) {
103 this.password = password;
106 public Boolean isRememberMe() {
110 public void setRememberMe(Boolean rememberMe) {
111 this.rememberMe = rememberMe;
115 public String toString() {
117 "username='" + username + '\'' +
118 ", rememberMe=" + rememberMe +