Skip to main content
 首页 » 编程设计

authentication之如何修复 Tomcat 警告 : An attempt was made to authenticate the locked user

2024年02月04日91wuhuacong

我正在将 Tomcat 7 与 Spring 和 JPA 应用程序一起使用,数据库为 MySQL。 一切工作正常,但有时会出现realm.LockOutRealm 身份验证问题。我还在我的应用程序中使用了连接池,例如:

persistence.xml:

<properties> 
      <property name="hibernate.connection.username" value="---"/> 
      <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/> 
      <property name="hibernate.connection.password" value="----------"/> 
      <property name="hibernate.connection.url" value="jdbc:mysql://----------?autoReconnect=true"/> 
      <!--Connection Pooling c3p0 configuration--> 
      <!--Minimum number of JDBC connections in the pool. Hibernate default: 1--> 
      <property name="hibernate.c3p0.min_size" value="5"/> 
      <!--Maximum number of JDBC connections in the pool. Hibernate default: 100--> 
      <property name="hibernate.c3p0.max_size" value="20"/> 
      <!--When an idle connection is removed from the pool (in second). Hibernate default: 0, never expire.--> 
      <property name="hibernate.c3p0.timeout" value="300"/> 
      <!--Number of prepared statements will be cached. Increase performance. Hibernate default: 0 , caching is disable.--> 
      <property name="hibernate.c3p0.max_statements" value="50"/> 
      <!--idle time in seconds before a connection is automatically validated. Hibernate default: 0--> 
      <property name="hibernate.c3p0.idle_test_period" value="300"/> 
</properties> 

server.xml 中的领域如下所示:

<!-- Use the LockOutRealm to prevent attempts to guess user passwords 
           via a brute-force attack --> 
      <Realm className="org.apache.catalina.realm.LockOutRealm"> 
        <!-- This Realm uses the UserDatabase configured in the global JNDI 
             resources under the key "UserDatabase".  Any edits 
             that are performed against this UserDatabase are immediately 
             available for use by the Realm.  --> 
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm" 
               resourceName="UserDatabase"/> 
      </Realm> 
 
      <Host name="localhost"  appBase="webapps" 
            unpackWARs="true" autoDeploy="true"> 
 
        <!-- SingleSignOn valve, share authentication between web applications 
             Documentation at: /docs/config/valve.html --> 
        <!-- 
        <Valve className="org.apache.catalina.authenticator.SingleSignOn" /> 
        --> 

我在网上搜索但找不到有关此问题的解决方案。有没有关于暴力攻击的人,如果有的话,解决方案是什么。

Catelina.out 中的错误日志是:

Mar 02, 2013 3:28:34 PM org.apache.catalina.realm.LockOutRealm authenticate 
WARNING: An attempt was made to authenticate the locked user "tomcat" 
Mar 02, 2013 3:29:49 PM org.apache.catalina.realm.LockOutRealm authenticate 
WARNING: An attempt was made to authenticate the locked user "tomcat" 
Mar 02, 2013 3:31:04 PM org.apache.catalina.realm.LockOutRealm authenticate 
WARNING: An attempt was made to authenticate the locked user "tomcat" 
Mar 02, 2013 3:37:25 PM org.apache.catalina.realm.LockOutRealm authenticate 
WARNING: An attempt was made to authenticate the locked user "admin" 
Mar 02, 2013 3:38:47 PM org.apache.catalina.realm.LockOutRealm authenticate 
WARNING: An attempt was made to authenticate the locked user "admin" 
Mar 02, 2013 3:39:58 PM org.apache.catalina.realm.LockOutRealm authenticate 
WARNING: An attempt was made to authenticate the locked user "admin" 
Mar 02, 2013 3:46:31 PM org.apache.catalina.realm.LockOutRealm authenticate 
WARNING: An attempt was made to authenticate the locked user "coyote" 
Mar 02, 2013 3:52:49 PM org.apache.catalina.realm.LockOutRealm authenticate 
WARNING: An attempt was made to authenticate the locked user "manager" 
Mar 02, 2013 3:59:03 PM org.apache.catalina.realm.LockOutRealm authenticate 
WARNING: An attempt was made to authenticate the locked user "administrator" 
Mar 02, 2013 4:06:38 PM org.apache.catalina.realm.LockOutRealm authenticate 
WARNING: An attempt was made to authenticate the locked user "root" 
Mar 02, 2013 4:07:52 PM org.apache.catalina.realm.LockOutRealm authenticate 
WARNING: An attempt was made to authenticate the locked user "root" 
Mar 02, 2013 4:09:17 PM org.apache.catalina.realm.LockOutRealm authenticate 
WARNING: An attempt was made to authenticate the locked user "root" 
Mar 02, 2013 4:10:35 PM org.apache.catalina.realm.LockOutRealm authenticate 
WARNING: An attempt was made to authenticate the locked user "root" 
Mar 02, 2013 4:11:47 PM org.apache.catalina.realm.LockOutRealm authenticate 
WARNING: An attempt was made to authenticate the locked user "root" 
Mar 02, 2013 4:13:02 PM org.apache.catalina.realm.LockOutRealm authenticate 
WARNING: An attempt was made to authenticate the locked user "root" 
Mar 02, 2013 4:14:17 PM org.apache.catalina.realm.LockOutRealm authenticate 
WARNING: An attempt was made to authenticate the locked user "root" 
Mar 02, 2013 4:15:34 PM org.apache.catalina.realm.LockOutRealm authenticate 
WARNING: An attempt was made to authenticate the locked user "root" 
 
> Hibernate: select 
 
----------------------------------  
javax.persistence.PersistenceException:  
org.hibernate.exception.JDBCConnectionException: could not execute query 
 
(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:525) 
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:409) 
    at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1118) 
    at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:3321) 
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1940) 
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2113) 
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2568) 
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2113) 
    at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2275) 
    at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeQuery(NewProxyPreparedStatement.java:116) 
    at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:186) 
    at org.hibernate.loader.Loader.getResultSet(Loader.java:1787) 
    at org.hibernate.loader.Loader.doQuery(Loader.java:674) 
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236) 
    at org.hibernate.loader.Loader.doList(Loader.java:2220) 
    ... 39 more 
Caused by: java.net.SocketException: Broken pipe 

请您参考如下方法:

上面的警告意味着您多次未能对用户 tomcat 进行身份验证。 Tomcat怀疑是对用户tomcat的暴力破解。

您在应用程序中使用什么身份验证?您在应用程序的 web.xml 中使用什么登录配置?

resourceName“UserDatabase”的默认配置是文件conf/tomcat-users.xml。 您是否更改了resourceName“UserDatabase”的配置?

您可以在文件server.xml中找到资源UserDatabase的配置:

<Resource name="UserDatabase" auth="Container" 
              type="org.apache.catalina.UserDatabase" 
              description="User database that can be updated and saved" 
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory" 
              pathname="conf/tomcat-users.xml" /> 

默认情况下,所有用户都会被评论。 为了能够使用 XML 文件中的用户,您应该取消注释。然后,您将能够使用用户 tomcat 登录:

<tomcat-users> 
  <role rolename="tomcat"/> 
  <user username="tomcat" password="tomcat" roles="tomcat"/> 
</tomcat-users> 

最诚挚的问候,

迈克尔