Skip to content
Snippets Groups Projects
Commit 55ba14f8 authored by Thomas's avatar Thomas
Browse files

auth fixes

parent a0a20889
Branches
No related tags found
No related merge requests found
package mozen.auth; package mozen.auth;
import java.io.IOException; import java.io.IOException;
import java.security.Key;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date;
import javax.servlet.FilterChain; import javax.servlet.FilterChain;
import javax.servlet.ServletException; import javax.servlet.ServletException;
...@@ -18,14 +14,11 @@ import org.springframework.security.authentication.AuthenticationManager; ...@@ -18,14 +14,11 @@ import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication; import org.springframework.security.core.Authentication;
import org.springframework.security.core.AuthenticationException; import org.springframework.security.core.AuthenticationException;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.User; import org.springframework.security.core.userdetails.User;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import mozen.model.LoginMessage; import mozen.model.LoginMessage;
import mozen.utils.KeyGenerator; import mozen.utils.JwtUtils;
public class JwtAuthenticationFilter extends UsernamePasswordAuthenticationFilter{ public class JwtAuthenticationFilter extends UsernamePasswordAuthenticationFilter{
private AuthenticationManager authenticationManager; private AuthenticationManager authenticationManager;
...@@ -53,24 +46,9 @@ public class JwtAuthenticationFilter extends UsernamePasswordAuthenticationFilte ...@@ -53,24 +46,9 @@ public class JwtAuthenticationFilter extends UsernamePasswordAuthenticationFilte
protected void successfulAuthentication(HttpServletRequest req, HttpServletResponse res, FilterChain chain, Authentication auth) protected void successfulAuthentication(HttpServletRequest req, HttpServletResponse res, FilterChain chain, Authentication auth)
throws IOException, ServletException { throws IOException, ServletException {
User user = (User) auth.getPrincipal(); User user = (User) auth.getPrincipal();
Key key = KeyGenerator.generateKey();
// ! A modifier si gestion multi roles (cf UserDetailsService) String token = JwtUtils.generateToken(user.getUsername());
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();
res.addHeader("Authorization", "Bearer " + token); res.addHeader("Authorization", "Bearer " + token);
} }
private Date toDate(LocalDateTime localDateTime) {
return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
}
} }
\ No newline at end of file
...@@ -15,7 +15,7 @@ import org.springframework.security.core.context.SecurityContextHolder; ...@@ -15,7 +15,7 @@ import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.web.authentication.www.BasicAuthenticationFilter; import org.springframework.security.web.authentication.www.BasicAuthenticationFilter;
import io.jsonwebtoken.Jwts; import io.jsonwebtoken.Jwts;
import mozen.utils.KeyGenerator; import mozen.utils.JwtUtils;
public class JwtAuthorizationFilter extends BasicAuthenticationFilter { public class JwtAuthorizationFilter extends BasicAuthenticationFilter {
...@@ -42,7 +42,7 @@ public class JwtAuthorizationFilter extends BasicAuthenticationFilter { ...@@ -42,7 +42,7 @@ public class JwtAuthorizationFilter extends BasicAuthenticationFilter {
private UsernamePasswordAuthenticationToken getAuthentication(HttpServletRequest request) { private UsernamePasswordAuthenticationToken getAuthentication(HttpServletRequest request) {
String token = request.getHeader("Authorization"); String token = request.getHeader("Authorization");
if(token != null) { if(token != null) {
Key key = KeyGenerator.generateKey(); Key key = JwtUtils.generateKey();
String username = Jwts.parser() String username = Jwts.parser()
.setSigningKey(key) .setSigningKey(key)
.parseClaimsJws(token.replace("Bearer ", "")) .parseClaimsJws(token.replace("Bearer ", ""))
......
package mozen.utils; package mozen.utils;
import java.security.Key; import java.security.Key;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;
import javax.crypto.spec.SecretKeySpec; import javax.crypto.spec.SecretKeySpec;
public class KeyGenerator { import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
public class JwtUtils {
public static Key generateKey() { public static Key generateKey() {
String keyString = "LePetitBonhommeEnMousse"; String keyString = "LePetitBonhommeEnMousse";
Key key = new SecretKeySpec(keyString.getBytes(), 0, keyString.getBytes().length, "DES"); Key key = new SecretKeySpec(keyString.getBytes(), 0, keyString.getBytes().length, "DES");
return key; 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
...@@ -10,7 +10,6 @@ import org.springframework.http.ResponseEntity; ...@@ -10,7 +10,6 @@ import org.springframework.http.ResponseEntity;
import org.springframework.security.authentication.AnonymousAuthenticationToken; import org.springframework.security.authentication.AnonymousAuthenticationToken;
import org.springframework.security.core.Authentication; import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder; 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.CrossOrigin;
import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
...@@ -47,6 +46,7 @@ public class ModelController { ...@@ -47,6 +46,7 @@ public class ModelController {
if(user != null) { if(user != null) {
return ResponseEntity.ok().body(user.getModels()); return ResponseEntity.ok().body(user.getModels());
} else { } else {
if(id == null) return ResponseEntity.badRequest().build();
return ResponseEntity.ok().body(modelManager.getModel(id)); return ResponseEntity.ok().body(modelManager.getModel(id));
} }
} }
...@@ -158,8 +158,8 @@ public class ModelController { ...@@ -158,8 +158,8 @@ public class ModelController {
Authentication auth = SecurityContextHolder.getContext().getAuthentication(); Authentication auth = SecurityContextHolder.getContext().getAuthentication();
if (!(auth instanceof AnonymousAuthenticationToken)) { if (!(auth instanceof AnonymousAuthenticationToken)) {
UserDetails userDetails = (UserDetails) auth.getPrincipal(); String username = (String) auth.getPrincipal();
return userManager.getUserByUsername(userDetails.getUsername()); return userManager.getUserByUsername(username);
} else { } else {
return null; return null;
} }
......
...@@ -5,7 +5,6 @@ import javax.validation.Valid; ...@@ -5,7 +5,6 @@ import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.validation.BindingResult; import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
...@@ -18,6 +17,7 @@ import mozen.business.IUserManager; ...@@ -18,6 +17,7 @@ import mozen.business.IUserManager;
import mozen.model.ResponseMessage; import mozen.model.ResponseMessage;
import mozen.model.SignupMessage; import mozen.model.SignupMessage;
import mozen.model.User; import mozen.model.User;
import mozen.utils.JwtUtils;
@RestController @RestController
@RequestMapping("/user") @RequestMapping("/user")
...@@ -28,15 +28,24 @@ public class UserController { ...@@ -28,15 +28,24 @@ public class UserController {
@GetMapping("") @GetMapping("")
public User getUser() { public User getUser() {
UserDetails userDetails = (UserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); String username = (String) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
return manager.getUserByUsername(userDetails.getUsername()); return manager.getUserByUsername(username);
} }
@PostMapping("/signup") @PostMapping("/signup")
public ResponseEntity<ResponseMessage> addUser(@RequestBody @Valid SignupMessage message, BindingResult result) { public ResponseEntity<ResponseMessage> addUser(@RequestBody @Valid SignupMessage message, BindingResult result) {
System.err.println("SIGNUP u:"+message.getUsername()+" e:"+message.getEmail()+" p:"+message.getPassword()); System.err.println("SIGNUP u:"+message.getUsername()+" e:"+message.getEmail()+" p:"+message.getPassword());
manager.addUser(message);
ResponseMessage response = new ResponseMessage(false, ""); 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); return ResponseEntity.ok(response);
} }
} }
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment