我有两个java webapps,它们运行在同一个jboss服务器上,但是在不同的域中:
两个网站的所有内容都通过使用JAAS登录模块进行保护。我现在想在app1中创建一个按钮,以转到app2上的页面。正如预测的那样,我会看到app2的登录屏幕。我可以成功登录。
然而,两个Web应用程序上的用户实际上是相同的。这意味着对app1有效的用户名/密码在app2上也有效。我想编写一些程序来绕过冗余安全检查。如果app1想从app2访问页面,我想以某种方式将j_username和j_password传递给app2,以便app2可以立即执行安全检查。如果我必须创建额外的控制器或jsp,并在这个过程中使用重定向,这不是问题。如何直接传递j_username和j_password,以便不再显示登录屏幕,但仍执行安全检查?
JAAS登录适用于安全域,而不适用于webapp。因此,您应该将这两个应用程序放在一个安全域中。它是web.xml中的登录配置部分:
<login-config>
<auth-method>FORM</auth-method>
<realm-name>ApplicationRealm</realm-name>
<form-login-config> ...............</form-login-config>
</login-config>
对于一个J2EE容器内的单点登录来说,这应该足够了。
它直接在JavaEE规范中指定:
EE.3.3.8.2 Web单点登录
......仅当跨越安全策略域边界时,才要求对用户进行重新身份验证............
编辑
经过一番探索,我发现在Wildfly中SSO是默认禁用的。在Wildfly中启用SSO:
>
standalone。xml
并添加 <jboss-web>
<security-domain>sso</security-domain>
<valve>
<class-name>org.apache.catalina.authenticator.SingleSignOn</class-name>
</valve>
</jboss-web>
在此之后,野蝇将使用特殊的cookie JSESIONIDSSO用于SSO
您需要的是使用JAAS
实现单点登录(SSO)
。在这里,您可以找到使用LDAP
作为登录模块的教程,但您会明白的。
由于您已经配置了< code>JAAS部分,因此您只需关注从第3页开始描述的< code>SSO部分。基本上,这个想法是配置一个模块,使用< code>useSharedState=true与另一个应用程序共享状态。
在您的< code>LoginModule中,您将使用类似以下的内容:
public boolean login() throws LoginException{
// ...
String username = null;
String password = null;
// check if useSharedState is true, if it is true, use the
// username/password from shared state.
if ("true".equalsIgnoreCase(option_.get("useShardState"))) {
username = (String)sharedStateMap_.get("javax.security.auth.login.name");
password = (String)sharedStateMap_.get("javax.security.auth.login.password");
} else {
// get the username and password from the CallbackHandler
Callback [] callbacks = {new NamePasswordCallback()};
handler_.handle(callbacks);
username = callback.getUserId();
password = callback.getPassword();
//save the username and password into the shared state
sharedStateMap.put("javax.security.auth.login.name",username);
sharedStateMap.put("javax.security.auth.login.password",password);
}
// ... communicates with data store to authenticate this user
}
由于在您的另一个问题中,您提到您正在使用JBoss,由于JBoss版本5.0,您可以使用:
<Valve className="org.apache.catalina.authenticator.SingleSignOn" debug="0"></Valve>
如果您使用的是WebAuthentication类,这将自动为您处理
SSO
。
我正在使用JAAS对访问我的web应用程序的受保护区域的用户进行身份验证。登录页面如下所示: 我的web-xml如下所示: 我的jaas配置如下所示: 因此,当我在contextPath/protected/test.xhtml这样的受保护区域中打开一个页面时,我会看到带有登录表单的login.xhtml。点击submit按钮后,用户将得到身份验证,但不是转发/重定向到最初请求的页面,而是重定向到
尝试按照配置文档使用JAAS向hawtio添加身份验证 通过使用jetty的demo base test jaas war来配置基本jaas/jetty登录,并能够进行身份验证/授权。 通过阅读文档,我试图将同样的概念融入hawtio,但我确信它甚至没有触及ldap,因为当我在演示战中尝试这一点时,我会得到类似的日志 我决定暂时忽略授权,尝试使用ldap进行身份验证。如果有人对我如何进一步调试这个
有人可以使用jaas登录模块吗。我在看医生 我想是这些登录模块可以1.与OS用户进行身份验证2.提供该用户的组。 基本上我想通过操作系统进行身份验证。输入用户名和密码 我想用windows进行身份验证 我不想做LDAP认证只做os认证。 对于windows,有华夫饼干库可用。但我无法在使用64位机器时进行身份验证。在32位上运行良好。 对于linux,有jpam,但它不提供组。它只会检查用户名、密
我正在尝试开发一个定制的JAAS登录模块,它使用一个令牌并从不同的来源获取用户数据。它应该作为wildfly 8.2.1 final的身份验证领域。我有一个测试servlet,我想在其中进行身份验证,以便检查注入EJB的允许角色。 这个网站的测试:http://www.radcortez.com/custom-principal-and-loginmodule-for-wildfly/事实上,我甚
使用基于表单的JAAS、MySQL、Apache TomEE、JSP、Servlet 我知道如何配置基于表单的JAAS,当用户试图访问安全页面时,自动将用户重定向到登录页面。基本上,我已经为TomEE和MySQL配置了JDBC领域(在文件中),在中,我已经声明了、和。 然后,有以下登录表单: 而且,这对于在web.xml中的标记中声明的页面很好。 但是,我想有明确的访问一个页面,用户可以登录。那么
我有一个使用SpringMVC的Java网络应用程序。该 Web 应用程序在 jboss AS7.1 服务器上运行,该服务器使用带有表单认证的 JAAS 登录模块。当用户在表单上填写其用户名和密码时,登录工作顺利。 我现在想创建一个java控制器,它“将用户登录”,就好像用户填写了日志通知一样。 当上述方法完成时,应允许对任何安全页面的任何访问,因为用户被视为已登录。 可以通过访问Jboss的lo