带有Wildfly 8,Java 1.8.0_45和Active Directory的Java SSO

我正在搜索很多关于这个主题的内容,但无法找到解决方案.

简要说明要求:

>在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

上一篇:java – 有没有干净的方法将上下文数据传递给@Asynchronous ejb调用?


下一篇:java – 将请求范围数据传递给CDI中的异步方法