我有一个LoginPlaintext
不能序列化的 Session-Scope Bean。
我有一个LoginMD5Salted
必须可序列化的 Session-Scope Bean。
两者共享不可序列化的接口Login
(因为 LoginPlaintext 必须不可序列化)!
我的 AppConfig.java 看起来像这样:
public class AppConfig
...
Login loginData(ServletRequest request){
if(request.getParameter('useMD5')!=null){
return new LoginMD5Salted();
}
return new LoginPlaintext();
}
}
我的 PermissionBean .java 看起来像这样:
public class PermissionBean implements Serializable{
@Autowired
Login loginData;
}
我的 LoginPlaintext 看起来像这样:
public class LoginPlaintext implements Login{
String plainTextPassword;
....
}
我的 LoginMD5Salted 看起来像这样:
public class LoginMD5Salted implements Login, Serializable{
private static final long serialVersionUID = 2742674005972067910L;
// not sure Upcase/Lowcase
String MD5PasswordSalted;
}
如果会话被序列化:beanLoginPlaintext
将不会被持久化。如果 Session 被反序列化,则所有其他值都可以很好地反序列化,但是反序列化器LoginPlaintext
会抛出 NotSerializableException,好的。
如果会话被序列化:beanLoginMD5Salted
将被很好地持久化。如果 Session 被反序列化,即使LoginMD5Salted
没有任何问题,所有值都可以很好地反序列化。问题:
- 我如何才能防止仅针对班级的日志消息
LoginPlaintext
? - 如果无法通过重新激活对 LoginPlaintext 进行反序列化,是否会再次调用 AppConfig 的 loginData() 方法?