您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

在不修改应用程序的情况下从Tomcat中的HttpServletRequest.getRemoteUser()获取值

在不修改应用程序的情况下从Tomcat中的HttpServletRequest.getRemoteUser()获取值

这是一个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" />
...

我想它也可以在EngineContext容器中使用。

Jave 2022/1/1 18:18:22 有511人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶