“禁止”,无法使用JAAS进行身份验证(WildFly)

时间:2015-01-26 08:52:55

标签: java-ee wildfly jaas

我已按照所有教程中的描述完成了它。

  1. 将MySql连接jar作为模块添加到WildFly(mySql-conn-driver.jar)
  2. module add --name=com.mysql --resources=/path/to/mysql-connector-java-5.1.24-bin.jar --dependencies=javax.api,javax.transaction.api

    /subsystem=datasources/jdbc-driver=mysql:add(driver-name=mysql,driver-module-name=com.mysql,driver-class-name=com.mysql.jdbc.Driver)

    1. 添加了DataSource
    2. [standalone@localhost:9990 /] /subsystem=datasources/data-source=niwads:add( driver-name=mysql, user-name=db_user, password=secret, connection-url=jdbc:mysql://localhost:3306/appdb, min-pool-size=5, max-pool-size=15, jndi-name=java:/jdbc/niwads, enabled=true, validate-on-match=true, valid-connection-checker-class-name=org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLValidConnectionChecker, exception-sorter-class-name=org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLExceptionSorter )

      1. 在浏览器中使用GUI创建安全域,而不是CLI。最后的结果是这样的:

        <security-domain name="niwasdnew" cache-type="default">
        <authentication>
            <login-module code="Database" flag="required">
                <module-option name="dsJndiName" value="java:/jbdc/niwads" /> 
                <module-option name="principalsQuery" value="select password as 'Password' from user_account where nickname=?" />
                <module-option name="rolesQuery" value="select r.rolname as 'Role', r.rolname as 'RoleGroup' from user_account u, role r where r.id=u.role_key and u.nickname=?" />
            </login-module>
        </authentication>
        

      2. 创建 jboss-web.xml 并将其添加到WEB-INF:

        <?xml version="1.0" encoding="UTF-8"?>
        <jboss-web>
                <security-domain>niwasdnew</security-domain>
        </jboss-web>
        
      3. 我的 web.xml 具有 FORM 身份验证角色,所以:

        <security-constraint>
            <web-resource-collection>
                <web-resource-name>pages for masters</web-resource-name>
                <url-pattern>/sections/master/*</url-pattern>
                <http-method>GET</http-method>
                <http-method>POST</http-method>
             </web-resource-collection>
            <auth-constraint>
                <role-name>admin</role-name>
            </auth-constraint>
        </security-constraint>
        <security-constraint>
            <web-resource-collection>
                <web-resource-name>pages for gardeners</web-resource-name>
                <url-pattern>/sections/gardener/*</url-pattern>
                <http-method>GET</http-method>
                <http-method>POST</http-method>
            </web-resource-collection>
            <auth-constraint>
                <role-name>gardener</role-name>
            </auth-constraint>
        </security-constraint>
        
        <login-config>
            <auth-method>FORM</auth-method>
            <form-login-config>
                <form-login-page>/login.xhtml</form-login-page>
                <form-error-page>/error.xhtml</form-error-page>
            </form-login-config>
        </login-config>
        
        <security-role>
            <role-name>admin</role-name>
        </security-role>
        <security-role>
            <role-name>gardener</role-name>
        </security-role>
        
      4. 毕竟,我在WildFly上开始我的项目,我看到我的欢迎页面,转到登录页面,填写所需字段按下登录按钮,它会根据用户的角色将我重定向到适当的位置 < / p>

        但我只看到“禁止”错误页面!

        我做错了什么?我错过了什么?

1 个答案:

答案 0 :(得分:1)

最后,我找到了问题的答案。在此recourse 它告诉我,我在第3步中犯了一个错误,我在SQL sentense中写module-option name="rolesQuery"选择r.rolname为'Role', r.rolname as'来自user_account u的RoleGroup',角色r,其中r.id = u.role_key和u.nickname =?

来自资源

  

注意:RoleGroup列的值必须始终为角色(使用大写“R”)。这是JBoss特有的。

所以propper SQL句子确实有效 - 在我的情况下 - 从user_account u中选择r.rolname为'Role','Roles'为'RoleGroup',角色r其中r.id = u.role_key和u.nickname =? - 正确答案