Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Thoughts about going from HttpServletRequest objcets to something we can feed to an AuthenticationHandler:

Panel
titleA poor man's diagram
Note
iconfalse
titleHttpServletRequest

An HttpServletRequest addressed to the Logon Controller representing a request for authentication.

enters the

Warning
iconfalse
titleLogon Controller

Controller which examines the request and applies some logic.

Logon controller applies an

Tip
iconfalse
titleAuthenticationRequestBinder

Translates from an HttpServletRequest to an AuthenticationRequest.

Code Block

/**
 * Interface for components that know how to extract from HttpServletRequest
 * whatever it is that constitutes actual arguments of the request for authentication.
 */
public interface AuthenticationRequestBinder {

    /**
     * Parse an HttpServletRequest and extract from it whatever it is that is necessary as input to the AuthenticationHandler
     * which will examine the request for authentication represented by the HttpServletRequest. Return an Object
     * encapsulating that extracted information.  Specific implementations will return specific objects which in turn specific
     * AuthenticationHandler implementations will expect and consume.
     * @returns an object representing the relevant information for the authentication request
     * @throws RuntimeException - indicates failure
     */
   Object authenticationRequestFromHttpServletRequest(HttpServletRequest httpServletRequest);

}

Implementation notes

...

Note
iconfalse
titleAuthenticationRequest, marker interfaces, and POJOs

I use the term AuthenticationRequest here in the interest of ubiquitous language and calling things what they are. I continue to prefer at an implementation level that we let these be just plain old Objects and not require that they implement a marker interface because doing so will allow a particular AuthenticationRequestBinder and AuthenticationHandler pair to agree to use any arbitrary Object one has lying around that meets the need and not have to wrap it with a CAS-specific AuthenticationHandler interface that adds no methods. My own preference. -~awp9

...