我正在搜索很多关于这个主题的内容,但无法找到解决方案.
简要说明要求:
>在Wildfly 8.2下的WebApp上进行SSO
>将Windows用户验证到Active Directory
>当SSO失败时,回退到登录表单
>在Wildfly的域配置中运行
环境:
> Microsoft AD Windows Server 2012 R2(1.机器)
>带有Wildfly 8.2的Microsoft Server 2012 R2(2.机器)
> 2.Machine yas加入了Domain
到目前为止,我尝试通过ktpass,kinit绑定AD和Wildfly服务器……它的工作原理!
>尝试以下:
github.com/dstraub/spnego-wildfly
事实上,没有工作,没有回退(基于表单)和Java版本1.8.0_45的问题
sourceforge.net/p/spnego/discussion/1003769/thread/700b6941/#cb84.
>接下来尝试:
github.com/kwart/spnego-demo
同样不起作用,似乎Wildfly 8.2有不同的行为.
> WAFFLE图书馆:
不能把它带到Wildfly下工作,对Tomcat的良好支持,但不是更多.
有人有使用此配置的经验吗?有解决方案吗?
解决方法:
这是解释:
>我创建了一个包含以下库的webapp:
> guava-18.0.jar
> jna-4.1.0.jar
> jna-platform-4.1.0.jar
> slf4j-api-1.7.12.jar
> waffle-jna-1.7.4.jar
>我在web.xml中声明了Webfilter:
<filter>
<filter-name>SecurityFilter</filter-name>
<filter-class>waffle.servlet.NegotiateSecurityFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>SecurityFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
>之后,您可以从HttpServletRequest中读取用户
public String getUserName() {
Enumeration<String> headerNames = servletRequest.getHeaderNames();
while (headerNames.hasMoreElements()) {
String headerName = headerNames.nextElement();
String headerValue = servletRequest.getHeader(headerName);
System.out.println("Header Name:" + headerName + " " + headerValue);
}
return servletRequest.getUserPrincipal().getName();
}
>为单点登录配置浏览器:
https://github.com/dblock/waffle/blob/master/Docs/ConfiguringBrowsers.md