Spring UserDetailsService не является атрибутом сеанса Serializable в google-apps-engine - PullRequest
1 голос
/ 18 октября 2010

Здесь у нас есть веб-приложение на основе Spring в движке приложений Google.

Я создал класс UserDetailService для загрузки UserDetails из хранилища данных GAE (при условии, что это лучший подход).

@Service("springUserDetailsService")
public class SpringUserDetailsService implements UserDetailsService {

    @Resource(name="userDao")
    private IUserDao userDao;
    //...

Но GAE выдает следующее исключение (по-видимому), когда пытается сохранить сеанс в хранилище данных.

java.lang.RuntimeException: java.io.NotSerializableException: com.prepayproxy.servicelayer.SpringUserDetailsService
    at com.google.apphosting.runtime.jetty.SessionManager.serialize(SessionManager.java:387)
    at com.google.apphosting.runtime.jetty.SessionManager.createEntityForSession(SessionManager.java:364)

Сначала я подумал сериализовать объект SprintUserDetailsService, но у него есть ссылка на мой UserDao, который, в свою очередь, имеет ссылки на объекты источника данных, примерно в этот момент я испугался и решил посмотреть, есть ли лучший подход.

Ответы [ 2 ]

1 голос
/ 18 октября 2010

Что касается вашего второго замечания, я только предполагаю, что Spring Security хранит ссылку на UserDetailsService в сеансе, как это связано с сериализацией GAE сеанса.Все вне моего контроля, насколько я вижу, если я что-то пропустил.

У SpringSecurity нет причин помещать ссылку на UserDetailsStore вашего приложения в сеанс.UserDetailsStore концептуально не ограничен сессией.

Если менеджер сеансов пытается сериализовать UserDetailsService, он, вероятно, является результатом ссылки на UserDetailsService в каком-то другом объекте области сеанса.

0 голосов
/ 18 октября 2010

Два варианта:

  • не беспокойтесь о пружине DataSource, начиная с версии 3, она предоставляет прокси, который при десериализации получает свежий источник данных, а неоригинал (который не имеет значения)

  • не помещает вашу службу в сеанс.Возможно, на него ссылается что-то, что находится в области видимости сеанса, поэтому сделайте его там нестабильным.

См. Также этот вопрос

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...