这是一个
Valve实现的概念证明:
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); }}(已在Tomcat 7.0.21中测试。)
编译它,将其放入一个jar中,然后将jar复制到该
apache-tomcat-7.0.21/lib文件夹中。您需要修改
server.xml:
<Host name="localhost" appbase="webapps" unpackWARs="true" autoDeploy="true"> <Valve className="remoteuservalve.RemoteUserValve" />...
我想它也可以在
Engine和
Context容器中使用。



