我有一个通配符8.0,最后运行,但我不能让我的野蝇做一个SSO。在IBM时代,我不得不定义web应用程序SSO。但是在通配符下,我不知道如何做到这一点,也不知道如何启用/配置它。
我对应用程序的打包如下:
myapp.ear:
通常,用户在gui.war上工作。在这里,用户获得一个基于表单的auth (它已经正常工作),web.war用于外部系统,这些系统通常使用基于表单的auth来执行基本的auth additional.war。
现在,每个战争文件的每个版本都如预期的那样工作。但我必须对每一个战争档案都做个调查,即使我已经通过了认证。因此,我的问题是,如何在通配符上启用web应用程序SSO (单点登录)?请记住,我对野蝇完全陌生,当然JBoss也是。所以我需要纽比的配置文件。
有人能给我推荐一本关于野蝇的好书吗?这本书能更详细地解释这些特性吗?
再见汉斯
发布于 2014-09-10 05:57:32
当前的解决方法是在所有战争的jboss-web.xml中包含以下内容:
<?xml version="1.0"?>
<jboss-web>
<session-config>
<cookie-config>
<path>/</path>
</cookie-config>
</session-config>
</jboss-web>
<xml>发布于 2014-03-21 15:43:11
不幸的是,由于通配符8.0.0中的域错误,这是一个很长的答案。这个答案适用于绕过bug --几乎可以肯定它有一个更简单的变体,但我对野蝇扩展还不太熟悉。
在standalone.xml (或domain.xml等效)中添加子系统、服务器、主机标签--不管域是什么。
在您的war文件中,添加:
WEB-INF/classes/META-INF/services/io.undertow.servlet.ServletExtension内容:
FixSSOServletExtension让这个类用一行实现ServletExtension:
deploymentInfo.addFirstAuthenticationMechanism("form", new FixSSOAuthenticationMechanism());(将表单更改为basic或任何您使用的内容)
在FixSSOAuthenticationMechanism.authenticate中:
exchange.addResponseWrapper(responseListener);
return AuthenticationMechanismOutcome.NOT_ATTEMPTED;(在另一种方法中,只返回新的ChallengeResult(false) )
添加:
final class ResponseListener implements ConduitWrapper<StreamSinkConduit> {
public StreamSinkConduit wrap(ConduitFactory<StreamSinkConduit> factory, HttpServerExchange exchange) {
Cookie c = exchange.getResponseCookies().get("JSESSIONIDSSO");
if( c!=null ) {
c.setDomain(null);
}
return factory.create();
}
}并在类中创建该实例的实例以返回。
添加到JBos-Deployment-structure.xml中
<module name="io.undertow.core" />
<module name="io.undertow.servlet" />
<module name="org.jboss.xnio" />您只需要在登录到的war文件中执行此操作--但是如果您可以登录多个位置,那么在任何地方都需要它,如果需要,可以将其放入共享模块或sar模块(我的副本位于sar中,因为那里部署了一个现有的安全mbean )。
发布于 2014-03-21 15:49:08
在下面编辑SignleSignOnAuthenticationMechanism.java,并删除方法调用:setDomain(域),重新编译该模块并在您的通配符目录中替换它。我认为这是https://issues.jboss.org/browse/WFLY-3033中的修复(除了域将取决于是否添加它)。
https://stackoverflow.com/questions/22100686
复制相似问题