JDBC Tomcat Auth 403 после входа в систему / роль не учитывается - PullRequest
1 голос
/ 24 июня 2019

Я настроил свою среду следующим образом, но после входа в систему появляется сообщение, что доступ запрещен, например, если роль настроена неправильно.

Вот некоторые сведения:

  • Я использую BASIC auth, и, пока я ввожу неверное имя пользователя или пароль, снова появляется форма входа в браузер. Когда я набираю правильное имя пользователя и передаю, оно исчезает, и я получаю сообщение об отказе в доступе
  • Если я настрою <role-name>*</role-name> Я не получу 403 и после входа в систему я могу получить доступ к защищенной странице
  • Консоль не показывает сообщение об ошибке

web.xml

    <security-role>
        <role-name>USER</role-name>
    </security-role>
    <security-role>
        <role-name>ADMIN</role-name>
    </security-role>
     <!--<security-role>
    <role-name>*</role-name>
    </security-role>-->

    <security-constraint>
        <display-name>IndexPage</display-name>
        <web-resource-collection>
            <web-resource-name>start</web-resource-name>
            <url-pattern>/pages/protected/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
        <!--<role-name>*</role-name> -->
            <role-name>USER</role-name>
            <role-name>ADMIN</role-name>
        </auth-constraint>
    </security-constraint>

    <login-config>
        <auth-method>BASIC</auth-method>
    </login-config>

server.xml

<Engine defaultHost="localhost" name="Catalina">
<Realm className="org.apache.catalina.realm.JDBCRealm"
connectionURL="jdbc:mysql://localhost:3306/jsfdb?user=root"
driverName="com.mysql.jdbc.Driver"
roleNameCol="role_name" 
userCredCol="password"
userNameCol="username1"
userRoleTable="user_role"
userTable="user"
/>

База данных

database
user данные
user table
user_role данные
user role table

1 Ответ

0 голосов
/ 24 июня 2019

Проблема заключалась в том, что в поле имени пользователя из таблицы user_role значением был первичный ключ таблицы пользователя. Ожидается фактическое имя пользователя, поэтому я исправил его, изменив PK с id на имя пользователя. БД теперь выглядит так:

db

...