开始在Wildfly中保护Jax-Rs webapp

时间:2015-05-21 10:23:23

标签: security jboss jax-rs wildfly picketlink

我用纯jax-rs前端接口创建了我的第一个Java EE 7应用程序。所有都经过测试,工作正常。 现在我想应用一个安全层(基于角色,应用于资源或方法)。我对最终想要的东西有一个清晰的想象(不知道它是否有意义),但我不确定如何到达那里(使用什么成分,按什么顺序)。 所以这就是我想要的:

  • 我想使用wildfly作为身份提供者(wildfly应该存储用户凭据 - 在数据库中加密)
  • 我的应用程序完全基于休息,所以我需要一些方法将身份验证信息放入请求(令牌?!)
  • 基本身份验证可以(每个用户都必须通过身份验证),不需要表单,不需要自行注册
  • 限制访问某些资源/方法我想使用Java EE 7标准(注释,拦截器......)

这有意义吗?如果是,是否存在以相同方式或至少非常相似的方式或文档? 我找到了jboss-picketlink-quickstarts,但这里有很多例子,我不确定哪个最合适。我需要picketlink吗?

由于我的持久层中有一个带有“UserRole”(枚举)的“用户”,我认为我需要IDP(Wildfly)和我自己的角色提供某种映射 - 对吗?

1 个答案:

答案 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>