Как реализовать функцию выхода из системы с помощью Spring Web Mvc - PullRequest
7 голосов
/ 18 ноября 2009

Я новичок в Spring Web MVC ..

Могу ли я получить пример или онлайн-ссылку, показывающую, как реализовать функцию выхода из системы с помощью Spring Web MVC?

Я не хочу использовать встроенную функцию защиты пружин (например, ACEGI) ..

Заранее спасибо ...

Ответы [ 3 ]

14 голосов
/ 19 мая 2011

Трюк с аннулированием сессии не работает. Кажется, аутентификация Spring где-то буферизует идентификатор сеанса и принимает COOKIE даже, если сеанс был признан недействительным.

Другое решение - очистить контекст безопасности Spring вручную:

public void manualLogout() {
    SecurityContextHolder.getContext().setAuthentication(null);
}

Вот код, как войти в систему вручную (если кому-то нужно):

public void doManualLogin(HttpServletRequest request, String u, String p) {
    UsernamePasswordAuthenticationToken token = 
            new UsernamePasswordAuthenticationToken(u, p);
    token.setDetails(new WebAuthenticationDetails(request));
    Authentication auth = authenticationProvider.authenticate(token);
    SecurityContextHolder.getContext().setAuthentication(auth);
}

, где authenticationProvider - это бин из вашей весенней конфигурации, которая реализует

org.springframework.security.authentication.AuthenticationProvider
9 голосов
/ 18 ноября 2009

Вам нужно только аннулировать сеанс, и пользователь вышел из системы Это напрямую поддерживается сервлетом api: HttpSession.invalidate () . Вы можете написать один контроллер, который вызывает только аннулирование.

class Logout implements Controller{
 public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response){
   ModelAndView view = //?;
   request.getSession().invalidate();
   return view;
 }      
}
1 голос
/ 18 сентября 2016
@Controller
    public class LogoutController {

        @RequestMapping(value="/logout",method = RequestMethod.GET)
        public String logout(HttpServletRequest request){
            HttpSession httpSession = request.getSession();
            httpSession.invalidate();
            return "redirect:/";
        }

    }

Пожалуйста, используйте приведенный выше код для реализации фильтра выхода из системы

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