Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用华夫饼干获取客户端用户名?_Java_Jsp_Tomcat_Waffle - Fatal编程技术网

Java 如何使用华夫饼干获取客户端用户名?

Java 如何使用华夫饼干获取客户端用户名?,java,jsp,tomcat,waffle,Java,Jsp,Tomcat,Waffle,我正在windows7上运行tomcat7。所有客户端也在运行Windows 7 我试图在test.jsp页面上打印客户端用户名,因此我使用Waffle。下面是WEB-INF/WEB.xml <filter> <filter-name>SecurityFilter</filter-name> <filter-class>waffle.servlet.NegotiateSecurityFilter</filter-class>

我正在
windows7
上运行
tomcat7
。所有客户端也在运行Windows 7

我试图在
test.jsp
页面上打印客户端用户名,因此我使用
Waffle
。下面是
WEB-INF/WEB.xml

 <filter>
  <filter-name>SecurityFilter</filter-name>
  <filter-class>waffle.servlet.NegotiateSecurityFilter</filter-class>
  <init-param>
    <param-name>impersonate</param-name>
    <param-value>true</param-value>
  </init-param>
</filter> 
但是,它总是打印
服务器
计算机用户名。我在许多
客户机
机器上试用了它,它总是打印
服务器
,而不是
客户机
用户ID


为什么??如何纠正这一点

神奇之处在于:
$pageContext.request.remoteUser

首先,将waffle-api.jar放在项目类路径上。然后将此xml代码放在web.xml上

<filter>
    <filter-name>SecurityFilter</filter-name>
    <filter-class>waffle.servlet.NegotiateSecurityFilter</filter-class>
    <init-param>
        <param-name>principalFormat</param-name>
        <param-value>fqn</param-value>
    </init-param>
    <init-param>
        <param-name>roleFormat</param-name>
        <param-value>both</param-value>
    </init-param>
    <init-param>
        <param-name>allowGuestLogin</param-name>
        <param-value>true</param-value>
    </init-param>
    <init-param>
        <param-name>securityFilterProviders</param-name>
        <param-value>
        waffle.servlet.spi.NegotiateSecurityFilterProvider
        waffle.servlet.spi.BasicSecurityFilterProvider
    </param-value>
    </init-param>
    <init-param>
        <param-name>waffle.servlet.spi.NegotiateSecurityFilterProvider/protocols</param-name>
        <param-value>
        Negotiate
        NTLM
    </param-value>
    </init-param>
    <init-param>
        <param-name>waffle.servlet.spi.BasicSecurityFilterProvider/realm</param-name>
        <param-value>WaffleFilterDemo</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>SecurityFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
有关更多详细信息,请访问:

功劳归于

资源链接:

  • 非常感谢你。我知道
    getRemoteUser()
    方法。但是,它要求客户端使用用户ID和密码进行身份验证。也许我应该重申我的问题。我需要在客户端不需要经过身份验证的情况下获取客户端用户ID。但是,
    getRemoteUser()
    会触发一个带有用户ID和密码的弹出窗口。此弹出窗口无法实现此目的。用户输入userid以便可以在页面上打印它。为此,我甚至不需要华夫格。您必须使用ntlm协议才能在不输入凭据的情况下使用华夫格。这对我有用。@john你有什么解决办法吗?谢谢。但是,此方法会触发一个弹出窗口,要求客户端键入用户ID和密码。这违背了目的。我甚至不需要华夫饼干。我可以简单地要求用户在文本字段中键入一个userid。我希望在客户端不需要进行任何额外操作的情况下获取用户IDsteps@john如果是这样的话,要么华夫饼干坏了,要么你做错了什么。它只适用于Internet Explorer。Chrome和Firefox显示弹出式身份验证窗口。@john,正如我所说的,你做错了什么。您必须告诉Firefox执行SPNEGO身份验证,它将执行您需要的操作。修改
    网络。协商身份验证受信任的URI
    网络。协商身份验证委派URI
    ,它将起作用。
    <filter>
        <filter-name>SecurityFilter</filter-name>
        <filter-class>waffle.servlet.NegotiateSecurityFilter</filter-class>
        <init-param>
            <param-name>principalFormat</param-name>
            <param-value>fqn</param-value>
        </init-param>
        <init-param>
            <param-name>roleFormat</param-name>
            <param-value>both</param-value>
        </init-param>
        <init-param>
            <param-name>allowGuestLogin</param-name>
            <param-value>true</param-value>
        </init-param>
        <init-param>
            <param-name>securityFilterProviders</param-name>
            <param-value>
            waffle.servlet.spi.NegotiateSecurityFilterProvider
            waffle.servlet.spi.BasicSecurityFilterProvider
        </param-value>
        </init-param>
        <init-param>
            <param-name>waffle.servlet.spi.NegotiateSecurityFilterProvider/protocols</param-name>
            <param-value>
            Negotiate
            NTLM
        </param-value>
        </init-param>
        <init-param>
            <param-name>waffle.servlet.spi.BasicSecurityFilterProvider/realm</param-name>
            <param-value>WaffleFilterDemo</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>SecurityFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    
    HttpServletRequest request = (HttpServletRequest)Executions.getCurrent().getNativeRequest();
    String user = request.getRemoteUser();