@Override public Object getProperty(String name) { return req.context().get(name, Object.class).orElse(null); }
@Override public void setProperty(String name, Object object) { req.context().register(name, object); }
/** * Creates new instance. * * @param req bare request from HTTP SPI implementation. * @param webServer relevant server. */ Request(BareRequest req, WebServer webServer) { this.bareRequest = req; this.webServer = webServer; this.context = ContextualRegistry.create(webServer.context()); this.queryParams = UriComponent.decodeQuery(req.uri().getRawQuery(), true); this.headers = new HashRequestHeaders(bareRequest.headers()); this.content = new Content(); }
private void registerContext(ServerRequest req, ServerResponse res) { Map<String, List<String>> allHeaders = new HashMap<>(req.headers().toMap()); Optional<Map> newHeaders = req.context().get(CONTEXT_ADD_HEADERS, Map.class); newHeaders.ifPresent(allHeaders::putAll); //make sure there is no context if (!req.context().get(SecurityContext.class).isPresent()) { SecurityEnvironment env = security.environmentBuilder() .targetUri(req.uri()) .path(req.path().toString()) .method(req.method().name()) .addAttribute("userIp", req.remoteAddress()) .addAttribute("userPort", req.remotePort()) .transport(req.isSecure() ? "https" : "http") .headers(allHeaders) .build(); EndpointConfig ec = EndpointConfig.builder() .build(); SecurityContext context = security.contextBuilder(String.valueOf(SECURITY_COUNTER.incrementAndGet())) .tracingSpan(req.spanContext()) .env(env) .endpointConfig(ec) .build(); req.context().register(context); req.context().register(defaultHandler); } req.next(); }
private void registerContext(ServerRequest req, ServerResponse res) { Map<String, List<String>> allHeaders = new HashMap<>(req.headers().toMap()); Optional<Map> newHeaders = req.context().get(CONTEXT_ADD_HEADERS, Map.class); newHeaders.ifPresent(allHeaders::putAll); //make sure there is no context if (!req.context().get(SecurityContext.class).isPresent()) { SecurityEnvironment env = security.environmentBuilder() .targetUri(req.uri()) .path(req.path().toString()) .method(req.method().name()) .addAttribute("userIp", req.remoteAddress()) .addAttribute("userPort", req.remotePort()) .transport(req.isSecure() ? "https" : "http") .headers(allHeaders) .build(); EndpointConfig ec = EndpointConfig.builder() .build(); SecurityContext context = security.contextBuilder(String.valueOf(SECURITY_COUNTER.incrementAndGet())) .tracingSpan(req.spanContext()) .env(env) .endpointConfig(ec) .build(); req.context().register(context); req.context().register(defaultHandler); } req.next(); }
@Override public <T> Optional<T> get(Class<T> type) { T result = registry.get(type); if (result == null) { if (parent == null) { return Optional.empty(); } else { return parent.get(type); } } else { return Optional.of(result); } }
@Override public void update(Routing.Rules rules) { // register the metric registry and factory to be available to all rules.any((req, res) -> { req.context().register(app); req.context().register(rf); totalCount.inc(); totalMeter.mark(); req.next(); }); rules.anyOf(CollectionsHelper.listOf(Http.Method.GET, Http.Method.OPTIONS), JsonSupport.create()); // routing to root of metrics rules.get(context, (req, res) -> getMultiple(req, res, base, app, vendor)) .options(context, (req, res) -> optionsMultiple(req, res, base, app, vendor)); // routing to each scope Stream.of(app, base, vendor) .forEach(registry -> { String type = registry.type(); rules.get(context + "/" + type, (req, res) -> getAll(req, res, registry)) .get(context + "/" + type + "/{metric}", (req, res) -> getOne(req, res, registry)) .options(context + "/" + type, (req, res) -> optionsAll(req, res, registry)) .options(context + "/" + type + "/{metric}", (req, res) -> optionsOne(req, res, registry)); }); }
@Override public <T> Optional<T> get(Object classifier, Class<T> type) { Objects.requireNonNull(classifier, "Parameter 'classifier' is null!"); ClassifiedRegistry cr = classifiers.get(classifier); if (cr != null) { T result = cr.get(type); if (result == null && parent != null) { return parent.get(classifier, type); } else { return Optional.ofNullable(result); } } else { if (parent != null) { return parent.get(classifier, type); } else { return Optional.empty(); } } }
@Override public void setProperty(String name, Object object) { req.context().register(name, object); }
@Override public void accept(ServerRequest req, ServerResponse res) { //process security SecurityContext securityContext = req.context() .get(SecurityContext.class) .orElseThrow(() -> new SecurityException( "Security context not present. Maybe you forgot to Routing.builder().register(SecurityAdapter.from" + "(security))...")); if (combined) { processSecurity(securityContext, req, res); } else { // the following condition may be met for multiple threads - and we don't really care // as the result is exactly the same in all cases and doesn't have side effects if (null == combinedHandler.get()) { // we may have a default handler configured SecurityHandler defaultHandler = req.context().get(SecurityHandler.class).orElse(DEFAULT_INSTANCE); // intentional same instance comparison, as I want to prevent endless loop //noinspection ObjectEquality if (defaultHandler == DEFAULT_INSTANCE) { combinedHandler.set(this); } else { combinedHandler.compareAndSet(null, builder(defaultHandler).configureFrom(this).combined().build()); } } combinedHandler.get().processSecurity(securityContext, req, res); } }
@Override public Object getProperty(String name) { return req.context().get(name, Object.class).orElse(null); }
@Override public void accept(ServerRequest req, ServerResponse res) { //process security SecurityContext securityContext = req.context() .get(SecurityContext.class) .orElseThrow(() -> new SecurityException( "Security context not present. Maybe you forgot to Routing.builder().register(SecurityAdapter.from" + "(security))...")); if (combined) { processSecurity(securityContext, req, res); } else { // the following condition may be met for multiple threads - and we don't really care // as the result is exactly the same in all cases and doesn't have side effects if (null == combinedHandler.get()) { // we may have a default handler configured SecurityHandler defaultHandler = req.context().get(SecurityHandler.class).orElse(DEFAULT_INSTANCE); // intentional same instance comparison, as I want to prevent endless loop //noinspection ObjectEquality if (defaultHandler == DEFAULT_INSTANCE) { combinedHandler.set(this); } else { combinedHandler.compareAndSet(null, builder(defaultHandler).configureFrom(this).combined().build()); } } combinedHandler.get().processSecurity(securityContext, req, res); } }