==== LU08.A05 Register/Login implementieren ====
Erstellen Sie unter ''src/main/java/ch/bzz/controller'' eine Controllerklasse ''ProjectApiController'', welche das bereits generierte interface ''ProjectApi'' implementiert.
package ch.bzz.controller;
@RestController
public class ProjectApiController implements ProjectApi {
private final ProjectRepository projectRepository;
private final BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
public ProjectApiController(ProjectRepository projectRepository) {
this.projectRepository = projectRepository;
}
@Override
public ResponseEntity createProject(LoginRequest loginRequest) {
// TODO: implement
}
@Override
public ResponseEntity loginProject(LoginRequest loginRequest) {
// TODO: implement
}
Versuchen Sie so weit wie möglich die beiden Methoden zu implementieren.
Für das Erstellen des JWT können Sie folgende Hilfsklasse verwenden.
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import io.jsonwebtoken.security.Keys;
import jakarta.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.security.Key;
import java.util.Date;
@Component
public class JwtUtil {
@Value("${jwt.secret}")
private String secret;
private Key key;
@PostConstruct
public void init() {
key = Keys.hmacShaKeyFor(secret.getBytes());
}
public String generateToken(String projectName) {
Date currentTime = new Date();
Date expirationTime = new Date(currentTime.getTime() + 3_600_000);
return Jwts.builder()
.setSubject(projectName)
.setIssuer("AccountingApp")
.setIssuedAt(currentTime)
.setExpiration(expirationTime)
.signWith(key, SignatureAlgorithm.HS256)
.compact();
}
public boolean validateToken(String token) {
try {
Jwts.parserBuilder().setSigningKey(key).build().parseClaimsJws(token);
return true;
} catch (Exception e) {
return false;
}
}
}