feat: Implémentation sécurité @RolesAllowed et corrections diverses
- Ajout DevSecurityContextProducer pour @RolesAllowed en dev - Correction UserSearchCriteriaDTO (searchTerm au lieu de searchText) - Mise à jour version quarkus-primefaces à 3.15.1 - Corrections expressions EL dans composants audit et role-assignment
This commit is contained in:
@@ -0,0 +1,20 @@
|
|||||||
|
package dev.lions.user.manager.config;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.databind.DeserializationFeature;
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import io.quarkus.jackson.ObjectMapperCustomizer;
|
||||||
|
import jakarta.inject.Singleton;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Configuration Jackson pour ignorer les propriétés inconnues
|
||||||
|
* Nécessaire pour la compatibilité avec les versions récentes de Keycloak
|
||||||
|
*/
|
||||||
|
@Singleton
|
||||||
|
public class JacksonConfig implements ObjectMapperCustomizer {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void customize(ObjectMapper objectMapper) {
|
||||||
|
// Ignorer les propriétés inconnues pour compatibilité Keycloak
|
||||||
|
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,80 @@
|
|||||||
|
package dev.lions.user.manager.security;
|
||||||
|
|
||||||
|
import jakarta.annotation.Priority;
|
||||||
|
import jakarta.inject.Inject;
|
||||||
|
import jakarta.ws.rs.Priorities;
|
||||||
|
import jakarta.ws.rs.container.ContainerRequestContext;
|
||||||
|
import jakarta.ws.rs.container.ContainerRequestFilter;
|
||||||
|
import jakarta.ws.rs.core.SecurityContext;
|
||||||
|
import jakarta.ws.rs.ext.Provider;
|
||||||
|
import org.eclipse.microprofile.config.inject.ConfigProperty;
|
||||||
|
import org.jboss.logging.Logger;
|
||||||
|
|
||||||
|
import java.security.Principal;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Filtre JAX-RS pour remplacer le SecurityContext en mode développement
|
||||||
|
* En dev, remplace le SecurityContext par un mock qui autorise tous les rôles
|
||||||
|
* En prod, laisse le SecurityContext réel de Quarkus
|
||||||
|
*/
|
||||||
|
@Provider
|
||||||
|
@Priority(Priorities.AUTHENTICATION - 1) // S'exécute avant l'authentification
|
||||||
|
public class DevSecurityContextProducer implements ContainerRequestFilter {
|
||||||
|
|
||||||
|
private static final Logger LOG = Logger.getLogger(DevSecurityContextProducer.class);
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
@ConfigProperty(name = "quarkus.profile", defaultValue = "prod")
|
||||||
|
String profile;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void filter(ContainerRequestContext requestContext) {
|
||||||
|
// En dev, remplacer le SecurityContext par un mock
|
||||||
|
if ("dev".equals(profile) || "development".equals(profile)) {
|
||||||
|
LOG.debug("Mode dev: remplacement du SecurityContext par un mock avec tous les rôles");
|
||||||
|
SecurityContext original = requestContext.getSecurityContext();
|
||||||
|
requestContext.setSecurityContext(new DevSecurityContext(original));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SecurityContext mock pour le mode développement
|
||||||
|
* Simule un utilisateur avec tous les rôles nécessaires
|
||||||
|
*/
|
||||||
|
private static class DevSecurityContext implements SecurityContext {
|
||||||
|
|
||||||
|
private final SecurityContext original;
|
||||||
|
private final Principal principal = new Principal() {
|
||||||
|
@Override
|
||||||
|
public String getName() {
|
||||||
|
return "dev-user";
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
public DevSecurityContext(SecurityContext original) {
|
||||||
|
this.original = original;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Principal getUserPrincipal() {
|
||||||
|
return principal;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isUserInRole(String role) {
|
||||||
|
// En dev, autoriser tous les rôles
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isSecure() {
|
||||||
|
return original != null ? original.isSecure() : false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getAuthenticationScheme() {
|
||||||
|
return "DEV";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Reference in New Issue
Block a user