Here is a proof of the implementation of Valve concept that does this:
import java.io.IOException; import java.security.Principal; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletException; import org.apache.catalina.connector.Request; import org.apache.catalina.connector.Response; import org.apache.catalina.realm.GenericPrincipal; import org.apache.catalina.valves.ValveBase; public class RemoteUserValve extends ValveBase { public RemoteUserValve() { } @Override public void invoke(final Request request, final Response response) throws IOException, ServletException { final String username = "myUser"; final String credentials = "credentials"; final List<String> roles = new ArrayList<String>(); // Tomcat 7 version final Principal principal = new GenericPrincipal(username, credentials, roles); // Tomcat 6 version: // final Principal principal = new GenericPrincipal(null, // username, credentials, roles); request.setUserPrincipal(principal); getNext().invoke(request, response); } }
(Tested with Tomcat 7.0.21.)
Compile it, put it in the jar and copy the jar to the apache-tomcat-7.0.21/lib folder. You need to change server.xml :
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Valve className="remoteuservalve.RemoteUserValve" /> ...
I believe that it works inside the Engine and Context containers.
Additional Information:
palacsint
source share