
nablarch.common.web.session.encoder.JavaSerializeEncryptStateEncoder Maven / Gradle / Ivy
The newest version!
package nablarch.common.web.session.encoder;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import nablarch.common.encryption.AesEncryptor;
import nablarch.common.encryption.Encryptor;
import nablarch.common.web.session.EncodeException;
import nablarch.common.web.session.StateEncoder;
/**
* Java標準のSerialize機構、暗号化を使用した{@link StateEncoder}実装クラス。
*
* デフォルトでは{@link AesEncryptor}による暗号化を行う。
*
* @author Naoki Yamamoto
*/
public class JavaSerializeEncryptStateEncoder implements StateEncoder {
/** 暗号化と復号に使用する{@link Encryptor} */
private Encryptor encryptor;
/** 暗号化と復号に使用するコンテキスト情報 */
private C encryptContext;
/**
* コンストラクタ。
*/
@SuppressWarnings("unchecked")
public JavaSerializeEncryptStateEncoder() {
setEncryptor((Encryptor) new AesEncryptor());
}
/**
* 暗号化/復号に使用する{@link Encryptor}を設定する。
* @param encryptor 暗号化/復号に使用する{@link Encryptor}
*/
public void setEncryptor(Encryptor encryptor) {
this.encryptor = encryptor;
encryptContext = encryptor.generateContext();
}
@Override
public byte[] encode(final T obj) {
try {
final ByteArrayOutputStream baos = new ByteArrayOutputStream(1024);
final ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(obj);
return encryptor.encrypt(encryptContext, baos.toByteArray());
} catch (IOException e) {
throw new EncodeException(e);
}
}
@SuppressWarnings("unchecked")
@Override
public T decode(final byte[] dmp, final Class type) {
try {
final ByteArrayInputStream bais = new ByteArrayInputStream(encryptor.decrypt(encryptContext, dmp));
final ObjectInputStream ois = new ObjectInputStream(bais);
return (T) ois.readObject();
} catch (Exception e) {
throw new EncodeException(e);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy