这是
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容器中使用。
更多信息:
- 阀门组件
- 阀门Javadoc



