Learn the techniques to avoid forgery and phishing attacks and the types of attacks an application or network may face.
// .... <Unsafe version using Enum> ...
public class ChangeTable extends Table {
static final Map<Enum,Field.Type> columnTypes = new HashMap<Enum,Field.Type>();
enum Column {
Change(Field.Type.String),
Date(Field.Type.Long);
// Keep track of the column types.
Column(Field.Type type) {
columnTypes.put(this, type);
}
};
public ChangeTable () {
super("ChangeTable", Column.values(), columnTypes);
}
}
public class Table {
final String tableName;
final Enum[] columns;
final Map<Enum,Field.Type> types;
Map<Enum,Object> values = new HashMap<Enum,Object>();
protected Table (String tableName, Enum [] columns, Map<Enum,Field.Type> types) {
this.tableName = tableName;
this.columns = columns;
this.types = types;
}
// Returns a query that will update all records matching the key.
private String updateQuery ( EnumSet key, Enum[] columns ) {
String query = "UPDATE "+tableName+" SET ";
// SET - All update columns not in key.
for ( int i = 0; i < columns.length; i++ ) {
Enum col = columns[i];
// Not key column.
if ( !key.contains(col) ) {
// Add field to query.
query += col.name() + " = " + values.get(col).toString();
}
}
// WHERE All columns in key.
query += " WHERE " + keyValues(key);
return query;
}
public String updateQuery (EnumSet key) {
// If columns not supplied, assume all columns.
return ( updateQuery(key, columns) );
}
public String updateQuery (EnumSet key, EnumSet updateColumns) {
// Allow an EnumSet of Columns to update.
return updateQuery(key, (Enum[]) updateColumns.toArray() );
}
private String keyValues ( EnumSet key ) {
String keyValues = "";
for ( Iterator i = key.iterator(); i.hasNext(); ) {
// Pull out the column.
Enum col = (Enum)i.next();
String val = values.get( col ).toString();
keyValues += col.name() + " = " + val;
}
return keyValues;
}
}
public class Field {
enum Type {
String,
Long;
}
public Field () {
}
}
// .... <Attempt at safe version, not using Enum but still using EnumSet> ...
public class SafeChangeTable extends SafeTable<SafeChangeTable.Column> {
static final Map<Column,Field.Type> columnTypes = new HashMap<Column,Field.Type>();
enum Column {
Change(Field.Type.String),
Date(Field.Type.Long);
// Keep track of the column types.
Column(Field.Type type) {
columnTypes.put(this, type);
}
};
public SafeChangeTable () {
super("ChangeTable", Column.values(), columnTypes);
}
}
public class SafeTable<Column extends Enum> {
final String tableName;
final Column[] columns;
final Map<Column,Field.Type> types;
Map<Column,Object> values = new HashMap<Column,Object>();
protected SafeTable (String tableName, Column [] columns, Map<Column,Field.Type> types) {
this.tableName = tableName;
this.columns = columns;
this.types = types;
}
public String updateQuery ( EnumSet key, Column[] columns ) {
String query = "UPDATE "+tableName+" SET ";
// SET - All update columns not in key.
for ( int i = 0; i < columns.length; i++ ) {
Column col = columns[i];
// Not key column.
if ( !key.contains(col) ) {
// Add field to query.
query += col.name() + " = " + values.get(col);
}
}
// WHERE All columns in key.
query += " WHERE " + keyValues(key);
return query;
}
public String updateQuery (EnumSet key) {
// If columns not supplied, assume all columns.
return ( updateQuery(key, columns) );
}
public String updateQuery (EnumSet key, EnumSet updateColumns) {
// Allow an EnumSet of Columns to update.
return updateQuery(key, (Column[]) updateColumns.toArray() );
}
private String keyValues ( EnumSet key ) {
String keyValues = "";
for ( Iterator i = key.iterator(); i.hasNext(); ) {
// Pull out the column.
Enum col = (Enum)i.next();
String val = values.get( col ).toString();
keyValues += col.name() + " = " + val;
}
return keyValues;
}
}
Do more with
public String updateQuery (EnumSet<? extends Column> key, Column[] columns) {
return null;
}
public String updateQuery (EnumSet<? extends Column> key) {
// If columns not supplied, assume all columns.
return ( updateQuery(key, columns) );
}
Premium Content
You need an Expert Office subscription to comment.Start Free Trial