Я новичок в Spring и GAE, и я предполагаю, что это легко, поэтому не упускайте простой ответ.
Весной я понимаю, что мне нужно создать реализацию UserDetailsService
, котораязаполняет UserDetails
для структуры безопасности при аутентификации.
После этого я получил NotSerializableException
на моем SpringUserDetailsService
бине, если я его сериализовал (как показано), я получил NotSerializableException
на DAOв конце концов.GAE сохраняет сеанс в хранилище данных, и, насколько я понимаю из чтения, среда Spring Web Security использует сеанс.
Если я добавлю @Scope("session)
к своему сервису, я получу следующее исключение, которого я действительно не понимаю.Также, кажется, не имеет смысла делать отдельную копию этого класса для каждого сеанса, все они должны просто ссылаться на синглтон.
BeanCreationException: Ошибка создания бина с именем 'testService': Scope'сеанс' не активен для текущего потока;рассмотрите возможность определения прокси-объекта с заданной областью действия для этого компонента, если вы собираетесь ссылаться на него из одноэлементного объекта;Вложенное исключение - java.lang.IllegalStateException: не найден привязанный к потоку запрос: Вы ссылаетесь на атрибуты запроса вне фактического веб-запроса или обрабатываете запрос вне первоначально получающего потока?Если вы действительно работаете в веб-запросе и по-прежнему получаете это сообщение, ваш код, вероятно, выполняется за пределами DispatcherServlet / DispatcherPortlet: в этом случае используйте RequestContextListener или RequestContextFilter для предоставления текущего запроса.
@Service("springUserDetailsService")
public class SpringUserDetailsService implements UserDetailsService, Serializable {
@Resource(name="userDao")
private IUserDao userDao;
@Override
public UserDetails loadUserByUsername(String username){...}
}
Для такой простой задачи, как форма входа в систему, это бьет меня в зад, может кто-нибудь помочь распутать мой мозг?