我一直试图找到这个错误的解决方案,但我找不到任何解决方案......
我在Netbeans中使用Maven来创建一个Web应用程序,我想介绍一个非常简单的用户注册/登录。所以我用Derby创建了这样的数据库:
CREATE TABLE Users (
usuario VARCHAR(50) NOT NULL PRIMARY KEY,
clave VARCHAR(50) NOT NULL
);
CREATE TABLE Roles (
usuario VARCHAR(50) NOT NULL,
rol VARCHAR(50) NOT NULL
);
然后我创建了Realm,正如Apache Tomcat的文档所说,在我的 context.xml
中<Context antiResourceLocking="true" path="/GestionScout">
<Realm className="org.apache.catalina.realm.DataSourceRealm"
dataSourceName="jdbc/GestionScout"
localDataSource="true"
roleNameCol="rol"
userCredCol="clave"
userNameCol="usuario"
userRoleTable="roles"
userTable="users"/>
<Resource auth="Container"
driverClassName="org.apache.derby.jdbc.ClientDriver"
maxActive="8"
name="jdbc/GestionScout"
password="dani"
type="javax.sql.DataSource"
url="jdbc:derby://localhost:1527/scout"
username="dani"/>
</Context>
最后我在 web.xml 中定义了安全约束,因此当您想要访问配置文件时,如果您尚未登录,则会加载登录表单并要求您输入您的登录信息。问题是,即使webapp可以访问derby数据库(我已经证明了这一点),在引入正确的登录信息后,它会重定向到 / inicio / admin / j_security_check 并且不会什么,就像我介绍了错误的信息......
我已经读过它可能是Tomcat 8+的一个问题所以我不得不在Realm中写一些CredentialHandler,但它既不起作用也不行。互联网上的每个教程都说我必须把Realm放在一些 server.xml 文件中,但我没有任何这个因为我使用的是Spring ...
到目前为止有任何帮助吗? :(
答案 0 :(得分:1)
正如您现在可能已经意识到的那样,如果您使用的是Spring Security,则无需配置DataSourceRealm(容器管理安全性)。
为了在升级到Tomcat 8.5之后搜索破解身份验证解决方案的任何人的利益...
我遇到了使用Tomcat容器托管安全性(DataSourceRealm)的遗留应用程序的问题。从Tomcat 8.5开始,您必须指定CredentialHandler。我们使用SHA-1(它相当陈旧)来加密存储在数据库中的密码。这意味着用
替换digest = sha
在哪个FWIW中定义在../webapp/META-INF/context.xml而不是/conf/server.xml中。只有此应用使用容器管理的身份验证
答案 1 :(得分:0)
基本上可以通过添加嵌套的CredentialHandler来解决此问题:
<Realm className="org.apache.catalina.realm.DataSourceRealm"...>
<CredentialHandler
className="org.apache.catalina.realm.MessageDigestCredentialHandler"
algorithm="MD5" />
</Realm>
考虑使用加盐哈希和更多迭代来提高安全性。
此处的其他信息(链接断开时请不要抱怨):http://people.apache.org/~schultz/ApacheCon%20NA%202016/Seamless%20Upgrades%20for%20Credential%20Security%20in%20Apache%20Tomcat.pdf