java - 未考虑登录/角色后的 JDBC Tomcat 身份验证 403

标签 java mysql authentication tomcat jdbcrealm

我已经像下面这样设置了我的环境,但在登录后它说访问被拒绝,就像角色设置不正确一样。

这里有一些信息:

  • 我使用 BASIC 身份验证,只要输入错误的用户名或密码,浏览器登录表单就会重新出现。当我输入正确的用户名并传递时,它就消失了,我收到了拒绝访问的消息
  • 如果我配置<role-name>*</role-name>我没有得到 403,登录后我可以访问 protected 页面
  • 控制台没有显示任何错误信息

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

最佳答案

问题在于 user_role 表的用户名字段中的值是用户表的主键。预期是实际用户名,所以我修复了它,将 PK 从 id 更改为用户名。数据库现在看起来像这样:

db

我讨厌 Java

关于java - 未考虑登录/角色后的 JDBC Tomcat 身份验证 403,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56733295/

相关文章:

authentication - 在 artifactory 中匿名拉取 docker repo

php - 基于 Symfony 2 的项目的安全性和登录

java - 将字符串转换为字符数组

java - 如何干净利落地关闭 AsynchronousSocketChannel?

java - Java封装

mysql - Docker 应用程序容器不会与我的 MySQL 容器通信

authentication - RestSharp 中的 OAuth 2.0 身份验证

java - 在 Java 中创建具有不同名称的新文本文件

mysql - COUNT(*) 不与 group by 一起工作?

php - 如何减少多个依赖查询