Java EE 7 EJB 安全性不工作
Java EE 7 EJB Security not working
我在 wildfly 8.2 上有一个 Java EE EAR 应用程序 运行,我正在尝试实施 Java EE 声明性安全性以保护对 EJB 方法的访问。因此,我已经添加到 standalone.xml
<security-domain name="MyDomain" cache-type="default">
<authentication>
<login-module code="Database" flag="required">
<module-option name="dsJndiName" value="java:jboss/datasources/MyDatasource"/>
<module-option name="principalsQuery" value="select password from user where username = ?"/>
<module-option name="rolesQuery" value="select DISTINCT r.name, 'Roles' from role r left join user_roles ur on ur.role_id=r.id left join user u on u.id=ur.user_id where u.username= ? and u.status=1 and r.active=1"/>
<module-option name="hashAlgorithm" value="SHA-256"/>
<module-option name="hashEncoding" value="base64"/>
<module-option name="unauthenticatedIdentity" value="guest"/>
</login-module>
</authentication>
</security-domain>
在jboss-web.xml我有
<?xml version="1.0" encoding="UTF-8"?>
<jboss-web xmlns="http://www.jboss.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.jboss.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-web_5_1.xsd">
<security-domain>MyDomain</security-domain>
<disable-audit>true</disable-audit>
<context-root/>
</jboss-web>
在web.xml我有
<login-config>
<auth-method>FORM</auth-method>
<realm-name>MyDomain</realm-name>
<form-login-config>
<form-login-page>/login.xhtml</form-login-page>
<form-error-page>/login.xhtml?failed=true</form-error-page>
</form-login-config>
</login-config>
在我拥有的一个 ManagedBean 中
@Named("levelController")
@DeclareRoles({"Create-Level", "View-Level", "Edit-Level", "Delete-Level"})
public class LevelController implements Serializable {
@DenyAll
public String create() {
//bla bla bla
}
}
我从 jsf 访问了 levelController.create() 并且能够在不登录的情况下成功创建关卡。
这只是暗示安全注释不是 working/maybe我做错了什么。谁能帮我找出问题所在
@DenyAll 和@DeclareRoles(以及@RolesAllowed)仅适用于 EJB(会话)bean,不适用于刚刚命名的 bean。
尝试添加@Stateless 使您的bean 成为会话bean,或将@Stateful 与作用域结合使用(例如@RequestScoped)。
我在 wildfly 8.2 上有一个 Java EE EAR 应用程序 运行,我正在尝试实施 Java EE 声明性安全性以保护对 EJB 方法的访问。因此,我已经添加到 standalone.xml
<security-domain name="MyDomain" cache-type="default">
<authentication>
<login-module code="Database" flag="required">
<module-option name="dsJndiName" value="java:jboss/datasources/MyDatasource"/>
<module-option name="principalsQuery" value="select password from user where username = ?"/>
<module-option name="rolesQuery" value="select DISTINCT r.name, 'Roles' from role r left join user_roles ur on ur.role_id=r.id left join user u on u.id=ur.user_id where u.username= ? and u.status=1 and r.active=1"/>
<module-option name="hashAlgorithm" value="SHA-256"/>
<module-option name="hashEncoding" value="base64"/>
<module-option name="unauthenticatedIdentity" value="guest"/>
</login-module>
</authentication>
</security-domain>
在jboss-web.xml我有
<?xml version="1.0" encoding="UTF-8"?>
<jboss-web xmlns="http://www.jboss.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.jboss.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-web_5_1.xsd">
<security-domain>MyDomain</security-domain>
<disable-audit>true</disable-audit>
<context-root/>
</jboss-web>
在web.xml我有
<login-config>
<auth-method>FORM</auth-method>
<realm-name>MyDomain</realm-name>
<form-login-config>
<form-login-page>/login.xhtml</form-login-page>
<form-error-page>/login.xhtml?failed=true</form-error-page>
</form-login-config>
</login-config>
在我拥有的一个 ManagedBean 中
@Named("levelController")
@DeclareRoles({"Create-Level", "View-Level", "Edit-Level", "Delete-Level"})
public class LevelController implements Serializable {
@DenyAll
public String create() {
//bla bla bla
}
}
我从 jsf 访问了 levelController.create() 并且能够在不登录的情况下成功创建关卡。
这只是暗示安全注释不是 working/maybe我做错了什么。谁能帮我找出问题所在
@DenyAll 和@DeclareRoles(以及@RolesAllowed)仅适用于 EJB(会话)bean,不适用于刚刚命名的 bean。
尝试添加@Stateless 使您的bean 成为会话bean,或将@Stateful 与作用域结合使用(例如@RequestScoped)。