我有一個Session-Scope Bean LoginPlaintext
,它不能是可序列化的。Spring的DI不是瞬態的,不可序列化但是日誌NSE
我有一個必須可序列化的會話範圍Bean LoginMD5Salted
。
兩者共享不是Serializable的接口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;
}
如果會話已被序列化:豆類LoginPlaintext
將不會被持久化。如果會話被反序列化,所有其他值都被反序列化,但解碼器LoginPlaintext
會拋出一個NotSerializableException,確定。
如果該會話被序列化:豆LoginMD5Salted
將保持良好。如果會話被反序列化,所有的值都被反序列化,即使是LoginMD5Salted
也沒有任何問題。 問題:
- 我該如何防止只有類
LoginPlaintext
的日誌消息? - 如果LoginPlaintext無法通過重新激活進行反序列化,AppConfig的loginData()方法是否會再次被調用?
請問您可以詳細說明一下 我該如何防止FooImpl1類的日誌消息? 如果FooImpl1無法通過重新激活進行反序列化,那麼AppConfig的foo()方法會再次被調用嗎? – 2013-05-02 15:42:17
1.在服務器啓動時,服務器上出現第一個帶有舊Session-ID-Cookie的請求:FooImpl1不能被反序列化,並且會記錄一個Exception,雖然它不是一個錯誤!如何防止非錯誤異常的記錄。 2.因此'@ Autowire'應該調用foo()來產生新的FooImpl2/FooImpl1。 – 2013-05-03 07:45:06
您能否提供有關您的組件的更多信息?類似於Foo對象的類聲明(成員迫使它保持不可序列化),無論Foo是會話屬性的一部分,還是直接綁定(您在哪裏使用@Autowired),何時何地Foo被初始化(您對AppConfig的調用.foo())等。 – 2013-05-06 08:57:22