Jboss 只能在特定于服务器的部署描述符中指定JAAS安全域信息吗?

Jboss 只能在特定于服务器的部署描述符中指定JAAS安全域信息吗?,jboss,glassfish,java-ee-6,jaas,Jboss,Glassfish,Java Ee 6,Jaas,我正在JSF中进行基于表单的身份验证,我可以让它工作,但它需要一个特定于服务器的部署描述符来指定JAAS安全域信息 例如,在JBoss 6上,我需要一个WEB-INF/JBoss WEB.xml和以下内容: <jboss-web> <security-domain>java:/jaas/myAppDomain</security-domain> </jboss-web> java:/jaas/myAppDomain 在glassfis

我正在JSF中进行基于表单的身份验证,我可以让它工作,但它需要一个特定于服务器的部署描述符来指定JAAS安全域信息

例如,在JBoss 6上,我需要一个
WEB-INF/JBoss WEB.xml
和以下内容:

<jboss-web>
    <security-domain>java:/jaas/myAppDomain</security-domain>
</jboss-web>

java:/jaas/myAppDomain
在glassfish上,类似的东西需要放在
WEB-INF/sunweb.xml

在EE6中是否有一种与供应商无关的方法来实现这一点?如果没有,为什么

在EE6中是否有一种与供应商无关的方法来实现这一点

是的,有。您需要在web.xml文件中指定领域名称,方式类似于下图所示:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
...
    <login-config>
        <auth-method>FORM</auth-method>
        <realm-name>myRealm</realm-name> <!-- the name of the realm created in the application server should be specified here -->
        <form-login-config>
            <form-login-page>/login.xhtml</form-login-page>
            <form-error-page>/login-error.xhtml</form-error-page>
        </form-login-config>
    </login-config>
...
</web-app>

...
类型
我的王国
/login.xhtml
/login-error.xhtml
...
除了角色到组映射(用于强制执行授权约束)之外,上述内容在Glassfish中工作,在sun-web.xml中没有任何条目

当web模块和EJB模块必须使用JBoss中一个安全管理器(以及其他容器中的等效实现)中的主体时,在JBoss部署描述符中指定
安全域
元素是一种更好的方法

考虑到JAAS登录模块的工作方式,并且不能在
ejb jar.xml
中指定用于身份验证的领域,ejb容器很可能允许基于来自不同登录模块的成功身份验证响应的业务方法调用(与您预期的不同)。这意味着位于不同领域但相同组(映射到业务方法允许的角色)的用户能够调用业务方法。为了避免这种情况,需要在特定于供应商的部署描述符中指定安全域

注意-我不确定容器在为战争中部署的EJB选择JAAS登录模块时的行为