Запрещено, невозможно пройти аутентификацию с помощью 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. Добавлен источник данных

[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. Создан домен безопасности с графическим интерфейсом в браузере, а не через интерфейс командной строки. Окончательный результат был таким:

    <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: выберите r.rolname как 'Role', r.rolname как 'RoleGroup' из user_account u, role r, где r.id = u.role_key и u .nickname =?

С ресурса

Примечание. Значение столбца RoleGroup всегда должно быть Roles (с заглавной буквой «R»). Это характерно для JBoss.

Таким образом, правильное предложение SQL действительно работает, в моем случае - выберите r.rolname как 'Role', 'Roles' как 'RoleGroup' из user_account u, role r, где r.id = u. role_key и u.nickname =? - правильный ответ

person miroque    schedule 27.01.2015