DataSourceRealm不能与Netbeans中的Tomcat 8.5.24,Spring和Maven一起使用

时间:2017-12-15 11:13:42

标签: spring maven tomcat authentication netbeans

我一直试图找到这个错误的解决方案,但我找不到任何解决方案......

我在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 ...

到目前为止有任何帮助吗? :(

2 个答案:

答案 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