這裏是概念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)
編譯它,把它放在一個罐子內,罐子複製到apache-tomcat-7.0.21/lib
文件夾。您需要修改server.xml
:
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="remoteuservalve.RemoteUserValve" />
...
我想它的工作Engine
和Context
容器裏面了。
的更多信息:
你的web應用如何使用這個插件進行溝通? – palacsint
@palacsint Web應用程序不與插件進行通信; Web服務器會照看它。 Web應用程序只是詢問遠程用戶的'HttpServletRequest'實例。 – Mark