我有一个Quarkus微服务,使用quarkus-oidc和quarkus-keycloak-authorization扩展与Keycloak进行身份验证和授权。
我需要另外实现以下两个请求拦截器/过滤器:
我尝试将@Priority(Interceptor.Priority.PLATFORM_BEFORE)和@Prematching也放到我的过滤器中,但是即使在OIDC启动后也被调用。
另外,有什么方法可以支持扩展quarkus oidc逻辑以包含自定义代码吗?
我无法获得oidc和keycloak-auth拦截器的优先级(知道这些可以帮助我确定过滤器的优先级)。请帮忙。
从quarkus Google网上论坛获得了答案。
对于#2,可以使用具有任何优先级(不应为@Prematching)的ContainerRequestFilter。
另一种选择是具有自定义HttpSecurityPolicy。验证后将调用此方法。
package org.acme.security.keycloak.authorization;
import javax.enterprise.context.ApplicationScoped;
import org.jboss.logging.Logger;
import io.quarkus.security.identity.SecurityIdentity;
import io.smallrye.mutiny.Uni;
import io.vertx.ext.web.RoutingContext;
@ApplicationScoped
public class SecurityHandler implements io.quarkus.vertx.http.runtime.security.HttpSecurityPolicy
{
@Override
public Uni<CheckResult> checkPermission(RoutingContext request, Uni<SecurityIdentity> identity, AuthorizationRequestContext requestContext)
{
Logger.getLogger(LoggingFilter.class).infof("================ custom permission");
return Uni.createFrom().item(CheckResult.PERMIT);
}
}
对于#1,我们可以使用Vertx @RouteFilter
样本过滤器:
只需注意优先级即可。优先级越高,首先将被调用。
package org.acme.security.keycloak.authorization;
import io.quarkus.vertx.web.RouteFilter;
import io.vertx.ext.web.RoutingContext;
public class WSAuthFilter
{
@RouteFilter(1000)
void myFilter(RoutingContext rc) {
rc.request().headers().add("Authorization", rc.request().query());
rc.next();
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句