Забранено, не може да се удостовери чрез JAAS (WildFly)

Направих го, както е описано във всички уроци.

  1. Добавяне на MySql буркан за връзка като модул към WildFly (mySql-conn-driver.jar)

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

[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. Created and added jboss-web.xml to 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>
    

След всичко това стартирам проекта си в WildFly, виждам началната си страница, отивам на страницата за вход, попълвам необходимите полета, натискам бутона за влизане и той ме пренасочва към подходящо място в зависимост от ролята на потребителя

НО виждам само страницата с грешка "Забранено"!

Какво правя грешно? Какво съм пропуснал?


person miroque    schedule 26.01.2015    source източник
comment
Начин за тестване би бил добавяне на сървлет в незащитен URL адрес и отпечатване/регистриране на информацията от заявката (remoteUser, userInRole и т.н.)   -  person SJuan76    schedule 26.01.2015
comment
@SJuan76 всички проекти използват jsf шаблон, така че показвам в горната част на страницата информация за потребителя и когато се върна към страницата за добре дошли, тя ми показва информация за потребителя, като удостоверяване, преминало през потребителя.   -  person miroque    schedule 26.01.2015


Отговори (1)


Най-накрая намерих отговора на моя въпрос. На този рекурс ми показва, че правя грешка в стъпка 3 където пиша module-option name="rolesQuery" в SQL sentense: изберете r.rolname като 'Role', r.rolname като 'RoleGroup' от user_account u, роля r където r.id=u.role_key и u .nickname=?

От ресурс

Забележка: Стойността на колоната RoleGroup винаги трябва да бъде Roles (с главно 'R'). Това е специфично за JBoss.

Така че правилното SQL изречение работи в моя случай — изберете r.rolname като „Role“, „Roles“ като „RoleGroup“ от user_account u, роля r, където r.id=u. role_key и u.nickname=? — правилният отговор

person miroque    schedule 27.01.2015