All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.wildfly.security.http.HttpServerRequest Maven / Gradle / Ivy

Go to download

This artifact provides a single jar that contains all classes required to use remote EJB and JMS, including all dependencies. It is intended for use by those not using maven, maven users should just import the EJB and JMS BOM's instead (shaded JAR's cause lots of problems with maven, as it is very easy to inadvertently end up with different versions on classes on the class path).

There is a newer version: 34.0.0.Final
Show newest version
/*
 * JBoss, Home of Professional Open Source.
 * Copyright 2015 Red Hat, Inc., and individual contributors
 * as indicated by the @author tags.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.wildfly.security.http;

import java.io.InputStream;
import java.net.InetSocketAddress;
import java.net.URI;
import java.security.cert.Certificate;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.function.Supplier;

import javax.net.ssl.SSLSession;

/**
 * Server side representation of a HTTP request.
 *
 * @author Darran Lofthouse
 */
public interface HttpServerRequest extends HttpServerScopes {

    /**
     * Get a list of all of the values set for the specified header within the HTTP request.
     *
     * @param headerName the not {@code null} name of the header the values are required for.
     * @return a list of the values set for this header, if the header is not set on the request then
     *         {@code null} should be returned.
     */
    List getRequestHeaderValues(final String headerName);

    /**
     * Get the first value for the header specified in the HTTP request.
     *
     * @param headerName the not {@code null} name of the header the value is required for.
     * @return the value for the first instance of the header specified, if the header is not present then {@code null} should
     *         be returned instead.
     */
    String getFirstRequestHeaderValue(final String headerName);

    /**
     * Get the {@link SSLSession} (if any) that has been established for the connection in use.
     *
     * Note that even if this is null {@link #getPeerCertificates()} can still return some certificates, as the certificates
     * may have been provided to the underlying server via some external mechanism (such as headers).
     *
     * @return the {@link SSLSession} (if any) that has been established for the connection in use, or {@code null} if none
     *         exists.
     */
    SSLSession getSSLSession();

    /**
     * Get the peer certificates established on the connection.
     *
     * @return the peer certificates established on the connection or {@code null} if none available.
     */
    Certificate[] getPeerCertificates();

    /**
     * Notification from the mechanism to state no authentication is in progress whilst evaluating the current request.
     *
     * @param responder a {@link HttpServerMechanismsResponder} that can send a challenge should it be required.
     */
    void noAuthenticationInProgress(final HttpServerMechanismsResponder responder);

    /**
     * Notification from the mechanism to state no authentication is in progress whilst evaluating the current request.
     *
     * If this form is called no challenge is expected from this mechanism.
     */
    default void noAuthenticationInProgress() {
        noAuthenticationInProgress(null);
    }

    /**
     * Notification that this mechanism has commenced but not completed authentication, typically because another challenge /
     * response round trip is required.
     *
     * @param responder a {@link HttpServerMechanismsResponder} that can send a challenge should it be required.
     */
    void authenticationInProgress(final HttpServerMechanismsResponder responder);

    /**
     * Notification that authentication is now complete.
     *
     * After this point the framework will perform an authorization check for the authenticated user and if successful establish
     * the identity of the request.
     *
     * @param responder a {@link HttpServerMechanismsResponder} that can send a response.
     */
    void authenticationComplete(final HttpServerMechanismsResponder responder);

    /**
     * 

Notification that authentication is now complete. * *

This method behaves exactly like {@code {@link #authenticationComplete(HttpServerMechanismsResponder)}}, allowing * mechanisms to register a logout handler which should be called when a logout request is received by the underlying container. * * @param responder a {@link HttpServerMechanismsResponder} that can send a response. * @param logoutHandler a {@link Runnable} that can handle logout */ void authenticationComplete(final HttpServerMechanismsResponder responder, Runnable logoutHandler); /** * Notification that authentication is now complete. * * After this point the framework will perform an authorization check for the authenticated user and if successful establish * the identity of the request. * * If this form is called no response is expected from this mechanism. */ default void authenticationComplete() { authenticationComplete(null); } /** * Notification that authentication failes. * * @param message an error message describing the failure. * @param responder a {@link HttpServerMechanismsResponder} that can send a challenge should it be required. */ void authenticationFailed(final String message, final HttpServerMechanismsResponder responder); /** * Notification that authentication failes. * * If this form is called no challenge is expected from this mechanism. * * @param message an error message describing the failure. */ default void authenticationFailed(final String message) { authenticationFailed(message, null); } /** * Notification to indicate that this was a bad request. * * @param failure an {@link HttpAuthenticationException} to describe the error. * @param responder a {@link HttpServerMechanismsResponder} that can send a challenge should it be required. */ void badRequest(HttpAuthenticationException failure, final HttpServerMechanismsResponder responder); /** * Notification to indicate that this was a bad request. * * If this form is called no challenge is expected from this mechanism. * * @param failure an {@link HttpAuthenticationException} to describe the error. */ default void badRequest(HttpAuthenticationException failure) { badRequest(failure, null); } /** * Returns the name of the HTTP method with which this request was made, for example, GET, POST, or PUT. * * @return a String specifying the name of the method with which this request was made */ String getRequestMethod(); /** * Get the URI representation for the current request. * * @return the URI representation for the current request. */ URI getRequestURI(); /** * Get the request path. This is the path relative to the context path. E.g.: for a HTTP GET request to * http://my.appserver.com/my-application/path/sub-path this method is going to return /path/sub-path. * * @return the request path */ String getRequestPath(); /** * Returns a remotely authenticated user * * @return the remote user principal or {@code null} if no remote user was authenticated. */ default String getRemoteUser() { return null; } /** * Returns the parameters received in the current request. * * These parameters will be from both the query string and the form data when available. * * Where a parameter is named both in the query string and in the form data the {@link List} will contain the values from the query * string followed by the values from the form data. * * @return the parameters received in the current request. */ Map> getParameters(); /** * Returns the names of all parameters either from the query string or from the form data where available. * * @return the names of all parameters either from the query string or from the form data where available. */ Set getParameterNames(); /** * Return the values for the parameter specified, where a parameter is specified both in the query string and in the form data the query string values will be first in the {@link List}. * * @param name the name of the desires parameter values. * @return the values for the parameter specified or {@code null} if the parameter was not in the request. */ List getParameterValues(String name); /** * Get the first value for the parameter specified. * * @param name the name of the parameter the first value is required for. * @return the first value of the named parameter or {@code null} if the parameter is not available. */ String getFirstParameterValue(String name); /** * Returns a {@link List} containing all of the {@link HttpServerCookie} objects the client sent with this request, or an empty {@link List} if no cookies were included in the request. * * @return a {@link List} containing all of the {@link HttpServerCookie} objects the client sent with this request, or an empty {@link List} if no cookies were included in the request. */ List getCookies(); /** * Returns the request input stream. * * @return the input stream or {@code null} if not supported. */ InputStream getInputStream(); /** * Get the source address of the HTTP request. * * @return the source address of the HTTP request */ InetSocketAddress getSourceAddress(); /** * Suspend the current request so that it can be subsequently resumed. * * @return {@code true} if suspending requests is supported, {@code false} otherwise. */ boolean suspendRequest(); /** * Resume any previously suspended request. * * @return {@code true} if resuming requests is supported, {@code false} otherwise. */ boolean resumeRequest(); /** * Set the request input stream supplier. The default implementation does nothing. * * @param requestInputStreamSupplier the request input stream supplier */ default void setRequestInputStreamSupplier(Supplier requestInputStreamSupplier) {} }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy