我正在JSF中进行基于表单的身份验证,我可以让它工作,但它需要一个特定于服务器的部署描述符来指定JAAS安全域信息。
例如:在JBoss 6上,我需要一个具有以下内容的WEB-INF/jboss-web.xml:
<jboss-web>
<security-domain>java:/jaas/myAppDomain</security-domain>
</jboss-web>在玻璃鱼上,类似的东西需要在WEB-INF/sun-web.xml中代替。
在EE6中是否有一种与供应商无关的方法来做到这一点?如果不是,那为什么?
发布于 2011-07-10 03:01:38
在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>上面的内容在Glassfish中工作,除了用于强制授权约束的组映射角色之外,在sun-web.xml中没有任何条目。
在security-domain部署描述符中指定JBoss元素是一种更好的方法,因为您有一个web模块和一个EJB模块,它们只能使用JBoss中一个Security的主体(以及其他容器中的等效实现)。
考虑到JAAS登录模块的工作方式以及不能在ejb-jar.xml中指定用于身份验证的领域,很有可能EJB容器将允许基于来自不同login的成功身份验证响应的业务方法调用(而不是您所期望的)。这意味着不同领域的用户(映射到业务方法的允许角色)相同的组能够调用业务方法。为了避免这种情况,人们会在特定于供应商的部署描述符中指定安全域。
注意-我不确定容器在为部署在WAR中的EJB选择JAAS登录模块时的行为。
https://stackoverflow.com/questions/6502590
复制相似问题