2014-12-22 12 views
0

В моем проекте у меня есть 2 модуля: один для входа и другой для регистрации нового пользователя.Spring Security, Войти после регистрации

Если пользователь уже существует, мой модуль входа в систему, который разработан с использованием Spring Security, отлично работает, то есть после входа в систему. Идентификатор пользователя сохраняется как UserPrincipal в объект HttpServletRequest.

Для регистрации нового пользователя я делаю первую запись в базе данных, а затем пытаюсь выполнить аутентификацию с использованием Spring Security, я пишу следующий код, чтобы сделать это, и он отлично работает.

Отрывок:

UsernamePasswordAuthenticationToken auth = new UsernamePasswordAuthenticationToken(userDetails, password, userDetails.getAuthorities()); 
authMgr.authenticate(auth); 
SecurityContextHolder.getContext().setAuthentication(auth); 

Проблема заключается в том, что я не получаю UserPrincipal в HttpServletRequest. поэтому после звонка setAuthentication(auth), я вызываю request.getuserprincipal() и он возвращает null.

ответ

0

Используйте следующую строку кода, я думаю, что это поможет вам:

Authentication authentication = new UsernamePasswordAuthenticationToken(userDetails, null, udetail.getAuthorities()); 
SecurityContextHolder.getContext().setAuthentication(authentication); 
Principal principal = request.getUserPrincipal(); 
0

Проблема решена, код точно так же, за исключением я должен был перенаправить запрос на получение UserPrincipal добавлен в запросе. Удивительно, но request.forward не работал, хотя в web.xml для весеннего фильтра был добавлен передний диспетчер.

0

Возможно, сразу после строки: SecurityContextHolder.getContext(). SetAuthentication (auth);

Я хотел бы добавить: request.getSession() SetAttribute (HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY, SecurityContextHolder.getContext());.

В противном случае пользователь не будет находиться в сеансе, который требуется Spring Security.

Смежные вопросы