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

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

There is a newer version: 2.4.1.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