/** * Create a new security context builder to build and instance. * This is expected to be invoked for each request/response exchange * that may be authenticated, authorized etc. Context holds the security subject... * Once your processing is done and you no longer want to keep security context, call {@link SecurityContext#logout()} to * clear subject and principals. * * @param id to use when logging, auditing etc. (e.g. some kind of tracing id). If none or empty, security instance * UUID will be used (at least to map all audit records for a single instance of security component). If * defined, security will prefix this id with security instance UUID * @return new fluent API builder to create a {@link SecurityContext} */ public SecurityContext.Builder contextBuilder(String id) { String newId = ((null == id) || id.isEmpty()) ? (instanceUuid + ":?") : (instanceUuid + ":" + id); return new SecurityContext.Builder(this) .id(newId) .executorService(executorService) .tracingTracer(securityTracer) .serverTime(serverTime); }
@Override public void filter(ContainerRequestContext request) { boolean closeParentSpan = false; SpanContext requestSpanContext = parentSpanContextProvider.get(); if (null == requestSpanContext) { closeParentSpan = true; Span requestSpan = security().tracer().buildSpan("security-parent").start(); request.setProperty(PROP_PARENT_SPAN, requestSpan); requestSpanContext = requestSpan.context(); } request.setProperty(PROP_CLOSE_PARENT_SPAN, closeParentSpan); // create a new security context SecurityContext securityContext = security() .contextBuilder(Integer.toString(CONTEXT_COUNTER.incrementAndGet(), Character.MAX_RADIX)) .tracingSpan(requestSpanContext) .executorService(executorService) .build(); injectionManager.<Ref<SecurityContext>>getInstance((new GenericType<Ref<SecurityContext>>() { }).getType()) .set(securityContext); if (featureConfig().shouldUsePrematchingAuthentication()) { doFilter(request, securityContext); } }
@Override public void filter(ContainerRequestContext request) { boolean closeParentSpan = false; SpanContext requestSpanContext = parentSpanContextProvider.get(); if (null == requestSpanContext) { closeParentSpan = true; Span requestSpan = security().tracer().buildSpan("security-parent").start(); request.setProperty(PROP_PARENT_SPAN, requestSpan); requestSpanContext = requestSpan.context(); } request.setProperty(PROP_CLOSE_PARENT_SPAN, closeParentSpan); // create a new security context SecurityContext securityContext = security() .contextBuilder(Integer.toString(CONTEXT_COUNTER.incrementAndGet(), Character.MAX_RADIX)) .tracingSpan(requestSpanContext) .executorService(executorService) .build(); injectionManager.<Ref<SecurityContext>>getInstance((new GenericType<Ref<SecurityContext>>() { }).getType()) .set(securityContext); if (featureConfig().shouldUsePrematchingAuthentication()) { doFilter(request, securityContext); } }