📄 manomalydetector.java
字号:
package net.jumperz.app.MGuardian.plugin;
import java.io.*;
import java.util.*;
import java.sql.*;
import java.net.*;
import net.jumperz.net.*;
import net.jumperz.sql.*;
import net.jumperz.util.*;
import net.jumperz.app.MGuardian.*;
public class MAnomalyDetector
extends MGuardianPlugin
{
private static final String DEFAULT_DATABASE_DIR_NAME = "./";
private static final String DEFAULT_JDBC_DRIVER_CLASS_NAME = "net.jumperz.ext.org.hsqldb.jdbcDriver";
private static final String DEFAULT_DBMS_URL = "jdbc:hsqldb:";
private static final String DEFAULT_DBMS_USER = "sa";
private static final String DEFAULT_DBMS_PASS = "";
private static final String DATABSE_PREFIX = "access";
private static final String QUERY_1 = "select count(*) from system_tables where table_name = 'TACCESS'";
private static final String QUERY_2 = "create cached table tAccess(time bigint,clientIp varchar( 15 ),clientPort int,guardianIp varchar( 15 ),guardianPort int,host varchar( 256 ),protocol varchar( 5 ),method varchar( 9 ),uri varchar( 1024 ), statusCode int )";
private Connection connection;
private String jdbcDriverClassName;
private String dbmsUrl;
private String dbmsUser;
private String dbmsPass;
//--------------------------------------------------------------------------------
public void startup()
throws IOException
{
try
{
startup2();
}
catch( Exception e )
{
throw new IOException( "plugin startup error. " + e.getMessage() );
}
}
//--------------------------------------------------------------------------------
private void startup2()
throws Exception
{
String databaseDirName = control.getProperty( "anomalyDetector.databaseDirName", DEFAULT_DATABASE_DIR_NAME );
File databaseDir = new File( databaseDirName );
if( databaseDir.exists() )
{
if( !databaseDir.isDirectory() )
{
throw new IOException( "databaseDir exists" );
}
}
else
{
databaseDir.mkdir();
}
jdbcDriverClassName = control.getProperty( "anomalyDetector.jdbcDriverClassName", DEFAULT_JDBC_DRIVER_CLASS_NAME );
dbmsUrl = control.getProperty( "anomalyDetector.dbmsUrl", DEFAULT_DBMS_URL );
dbmsUser = control.getProperty( "anomalyDetector.dbmsUser", DEFAULT_DBMS_USER );
dbmsPass = control.getProperty( "anomalyDetector.dbmsPass", DEFAULT_DBMS_PASS );
Class.forName( jdbcDriverClassName );
connection = DriverManager.getConnection( dbmsUrl + databaseDir.getCanonicalPath() + "/" + DATABSE_PREFIX, dbmsUser, dbmsPass );
// table exists?
int count = MSqlUtil.getInt( connection, QUERY_1 );
if( count == 0 )
{
//create table
MSqlUtil.executeQuery( connection, QUERY_2 );
}
}
//--------------------------------------------------------------------------------
public Map execute( Map sessionInfo )
throws IOException
{
MHttpRequest request = ( MHttpRequest )sessionInfo.get( "request" );
MHttpResponse response = ( MHttpResponse )sessionInfo.get( "response" );
Socket clientSideSocket = ( Socket )sessionInfo.get( "clientSideSocket" );
long currentTime = System.currentTimeMillis();
String clientIp = clientSideSocket.getInetAddress().getHostAddress();
int clientPort = clientSideSocket.getPort();
String guardianIp = clientSideSocket.getLocalAddress().getHostAddress();
int guardianPort = clientSideSocket.getLocalPort();
String host = "-";
if( request.headerExists( "Host" ) )
{
host = request.getHeaderValue( "Host" );
}
String protocol = ( String )sessionInfo.get( "protocol" );
String method = request.getMethod();
String uri = request.getUri();
int statusCode = response.getStatusCode();
String queryString =
"insert into tAccess values( ?,?,?,?,?,?,?,?,?,? )";
MObjectArray args = new MObjectArray();
args.add( currentTime );
args.add( clientIp );
args.add( clientPort );
args.add( guardianIp );
args.add( guardianPort );
args.add( host );
args.add( protocol );
args.add( method );
args.add( uri );
args.add( statusCode );
try
{
synchronized( connection )
{
MSqlUtil.executeUpdate2( connection, queryString, args );
}
}
catch( SQLException e )
{
throw new IOException( "plugin error. " + e.getMessage() );
}
return null;
}
//--------------------------------------------------------------------------------
public void shutdown()
{
try
{
connection.close();
}
catch( SQLException e )
{
e.printStackTrace();
}
}
//--------------------------------------------------------------------------------
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -