我用纯jax-rs前端接口创建了我的第一个Java EE 7应用程序。所有都经过测试,工作正常。 现在我想应用一个安全层(基于角色,应用于资源或方法)。我对最终想要的东西有一个清晰的想象(不知道它是否有意义),但我不确定如何到达那里(使用什么成分,按什么顺序)。 所以这就是我想要的:
这有意义吗?如果是,是否存在以相同方式或至少非常相似的方式或文档? 我找到了jboss-picketlink-quickstarts,但这里有很多例子,我不确定哪个最合适。我需要picketlink吗?
由于我的持久层中有一个带有“UserRole”(枚举)的“用户”,我认为我需要IDP(Wildfly)和我自己的角色提供某种映射 - 对吗?
答案 0 :(得分:2)
这或多或少是我所做的:
用户数据库领域,在standalone.xml上:
<security-domain name="THE_Realm" cache-type="default">
<authentication>
<login-module code="Database" flag="required">
<module-option name="dsJndiName" value="java:/jdbc/risk_ds"/>
<!--module-option name="principalsQuery" value="SELECT encode(pass, 'hex') as 'Password' FROM user WHERE username = ?"/-->
<module-option name="principalsQuery" value="SELECT pass as 'Password' FROM user WHERE username = ?"/>
<module-option name="rolesQuery" value="select role as 'Role', 'Roles' from user_role WHERE username = ?"/>
<module-option name="hashAlgorithm" value="SHA-256"/>
<module-option name="hashEncoding" value="hex"/>
</login-module>
</authentication>
</security-domain>
请参阅log,standalone.xml上的数据库登录查询:
<logger category="org.jboss.security">
<level name="TRACE"/>
</logger>
在数据库中插入密码:设置SHA256 + HEX 此外,还需要插入角色。
insert into user (username, password)
set ('the_name', sha2('the_password',256))
在jboss-web.xml上设置领域
<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>
<security-domain>THE_Realm</security-domain>
</jboss-web>
在web.xml上,创建安全约束:
<security-constraint>
<web-resource-collection>
<web-resource-name>Secure Content</web-resource-name>
<url-pattern>/the_path/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>ROLE_USER</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>THE_Realm</realm-name>
</login-config>
<security-role>
<description>The role required to access restricted content </description>
<role-name>ROLE_USER</role-name>
</security-role>