我是Spring Web MVC的新手..
我可以获得一些示例或在线链接,向我展示如何使用spring web mvc实现注销功能吗?
我不想使用Spring安全性的内置功能(即ACEGI)..
提前致谢...
答案 0 :(得分:14)
会话失效的诀窍不起作用。似乎Spring身份验证会在某处缓冲会话ID,并且如果会话无效,则会接受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是来自spring spring配置的bean,它实现了
org.springframework.security.authentication.AuthenticationProvider
答案 1 :(得分:9)
您只需要使会话无效并且用户已注销。 servlet api:HttpSession.invalidate()直接支持这一点。您可以编写一个仅调用invalidate的控制器。
class Logout implements Controller{
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response){
ModelAndView view = //?;
request.getSession().invalidate();
return view;
}
}
答案 2 :(得分:2)
@Controller
public class LogoutController {
@RequestMapping(value="/logout",method = RequestMethod.GET)
public String logout(HttpServletRequest request){
HttpSession httpSession = request.getSession();
httpSession.invalidate();
return "redirect:/";
}
}
请使用上面的代码实现注销过滤器