diff --git a/mozen/src/main/java/mozen/auth/JwtAuthenticationFilter.java b/mozen/src/main/java/mozen/auth/JwtAuthenticationFilter.java index 6feaf4b6bb6e1f1efb96cca94f5c25cfef6500e5..934baad45cba152a460de9d159c2c8a3a043de03 100644 --- a/mozen/src/main/java/mozen/auth/JwtAuthenticationFilter.java +++ b/mozen/src/main/java/mozen/auth/JwtAuthenticationFilter.java @@ -1,11 +1,7 @@ package mozen.auth; import java.io.IOException; -import java.security.Key; -import java.time.LocalDateTime; -import java.time.ZoneId; import java.util.ArrayList; -import java.util.Date; import javax.servlet.FilterChain; import javax.servlet.ServletException; @@ -18,14 +14,11 @@ import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.Authentication; import org.springframework.security.core.AuthenticationException; -import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.userdetails.User; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; -import io.jsonwebtoken.Jwts; -import io.jsonwebtoken.SignatureAlgorithm; import mozen.model.LoginMessage; -import mozen.utils.KeyGenerator; +import mozen.utils.JwtUtils; public class JwtAuthenticationFilter extends UsernamePasswordAuthenticationFilter{ private AuthenticationManager authenticationManager; @@ -53,24 +46,9 @@ public class JwtAuthenticationFilter extends UsernamePasswordAuthenticationFilte protected void successfulAuthentication(HttpServletRequest req, HttpServletResponse res, FilterChain chain, Authentication auth) throws IOException, ServletException { User user = (User) auth.getPrincipal(); - Key key = KeyGenerator.generateKey(); - // ! A modifier si gestion multi roles (cf UserDetailsService) - SimpleGrantedAuthority authority = (SimpleGrantedAuthority) user.getAuthorities().toArray()[0]; - - String token = Jwts.builder() - .setSubject(user.getUsername()) - .claim("username",user.getUsername()) - .claim("role",authority.getAuthority()) - .setIssuedAt(new Date()) - .setExpiration(toDate(LocalDateTime.now().plusDays(1L))) - .signWith(SignatureAlgorithm.HS512, key) - .compact(); + String token = JwtUtils.generateToken(user.getUsername()); res.addHeader("Authorization", "Bearer " + token); } - - private Date toDate(LocalDateTime localDateTime) { - return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant()); - } } \ No newline at end of file diff --git a/mozen/src/main/java/mozen/auth/JwtAuthorizationFilter.java b/mozen/src/main/java/mozen/auth/JwtAuthorizationFilter.java index 963fc3206a7654327d302d4c4b2f724f6da35a2c..a874066216e05de5a2d7e26e01b9ead917833af4 100644 --- a/mozen/src/main/java/mozen/auth/JwtAuthorizationFilter.java +++ b/mozen/src/main/java/mozen/auth/JwtAuthorizationFilter.java @@ -15,7 +15,7 @@ import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.web.authentication.www.BasicAuthenticationFilter; import io.jsonwebtoken.Jwts; -import mozen.utils.KeyGenerator; +import mozen.utils.JwtUtils; public class JwtAuthorizationFilter extends BasicAuthenticationFilter { @@ -42,7 +42,7 @@ public class JwtAuthorizationFilter extends BasicAuthenticationFilter { private UsernamePasswordAuthenticationToken getAuthentication(HttpServletRequest request) { String token = request.getHeader("Authorization"); if(token != null) { - Key key = KeyGenerator.generateKey(); + Key key = JwtUtils.generateKey(); String username = Jwts.parser() .setSigningKey(key) .parseClaimsJws(token.replace("Bearer ", "")) diff --git a/mozen/src/main/java/mozen/utils/JwtUtils.java b/mozen/src/main/java/mozen/utils/JwtUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..11c01364355c0b1ade9c4f534f5c83c7ccc5bef9 --- /dev/null +++ b/mozen/src/main/java/mozen/utils/JwtUtils.java @@ -0,0 +1,33 @@ +package mozen.utils; + +import java.security.Key; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.Date; + +import javax.crypto.spec.SecretKeySpec; + +import io.jsonwebtoken.Jwts; +import io.jsonwebtoken.SignatureAlgorithm; + +public class JwtUtils { + public static Key generateKey() { + String keyString = "LePetitBonhommeEnMousse"; + Key key = new SecretKeySpec(keyString.getBytes(), 0, keyString.getBytes().length, "DES"); + return key; + } + + public static String generateToken(String username) { + return Jwts.builder() + .setSubject(username) + .claim("username", username) + .setIssuedAt(new Date()) + .setExpiration(toDate(LocalDateTime.now().plusDays(1L))) + .signWith(SignatureAlgorithm.HS512, generateKey()) + .compact(); + } + + private static Date toDate(LocalDateTime localDateTime) { + return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant()); + } +} \ No newline at end of file diff --git a/mozen/src/main/java/mozen/utils/KeyGenerator.java b/mozen/src/main/java/mozen/utils/KeyGenerator.java deleted file mode 100644 index 75f0bdd610eb7524f3979afb2f4440357d40b6ad..0000000000000000000000000000000000000000 --- a/mozen/src/main/java/mozen/utils/KeyGenerator.java +++ /dev/null @@ -1,12 +0,0 @@ -package mozen.utils; - -import java.security.Key; -import javax.crypto.spec.SecretKeySpec; - -public class KeyGenerator { - public static Key generateKey() { - String keyString = "LePetitBonhommeEnMousse"; - Key key = new SecretKeySpec(keyString.getBytes(), 0, keyString.getBytes().length, "DES"); - return key; - } -} \ No newline at end of file diff --git a/mozen/src/main/java/mozen/web/ModelController.java b/mozen/src/main/java/mozen/web/ModelController.java index 351b81f5383d7802b421915d7ebbd23493ba97a8..e9ec2614ba3ae8ed2c1a19be048bd52066a1cb42 100644 --- a/mozen/src/main/java/mozen/web/ModelController.java +++ b/mozen/src/main/java/mozen/web/ModelController.java @@ -10,7 +10,6 @@ import org.springframework.http.ResponseEntity; import org.springframework.security.authentication.AnonymousAuthenticationToken; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.core.userdetails.UserDetails; import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; @@ -47,6 +46,7 @@ public class ModelController { if(user != null) { return ResponseEntity.ok().body(user.getModels()); } else { + if(id == null) return ResponseEntity.badRequest().build(); return ResponseEntity.ok().body(modelManager.getModel(id)); } } @@ -158,8 +158,8 @@ public class ModelController { Authentication auth = SecurityContextHolder.getContext().getAuthentication(); if (!(auth instanceof AnonymousAuthenticationToken)) { - UserDetails userDetails = (UserDetails) auth.getPrincipal(); - return userManager.getUserByUsername(userDetails.getUsername()); + String username = (String) auth.getPrincipal(); + return userManager.getUserByUsername(username); } else { return null; } diff --git a/mozen/src/main/java/mozen/web/UserController.java b/mozen/src/main/java/mozen/web/UserController.java index d09ce028acff63d2ac4ce4d304a7cff40b1c5118..8fb2965a27efdbcead00ba337b19673eb98e598b 100644 --- a/mozen/src/main/java/mozen/web/UserController.java +++ b/mozen/src/main/java/mozen/web/UserController.java @@ -5,7 +5,6 @@ import javax.validation.Valid; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.core.userdetails.UserDetails; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.GetMapping; @@ -18,6 +17,7 @@ import mozen.business.IUserManager; import mozen.model.ResponseMessage; import mozen.model.SignupMessage; import mozen.model.User; +import mozen.utils.JwtUtils; @RestController @RequestMapping("/user") @@ -28,15 +28,24 @@ public class UserController { @GetMapping("") public User getUser() { - UserDetails userDetails = (UserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); - return manager.getUserByUsername(userDetails.getUsername()); + String username = (String) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); + return manager.getUserByUsername(username); } @PostMapping("/signup") public ResponseEntity<ResponseMessage> addUser(@RequestBody @Valid SignupMessage message, BindingResult result) { System.err.println("SIGNUP u:"+message.getUsername()+" e:"+message.getEmail()+" p:"+message.getPassword()); - manager.addUser(message); ResponseMessage response = new ResponseMessage(false, ""); + + try { + manager.addUser(message); + response.setMessage(JwtUtils.generateToken(message.getUsername())); + } catch (Exception e) { + response.setError(true); + response.setMessage(e.getMessage()); + } + return ResponseEntity.ok(response); } + } \ No newline at end of file