Java 如何使用SpringWebMVC实现注销特性
我是SpringWebMVC的新手 我可以得到一些示例或在线链接来演示如何使用SpringWebMVC实现注销功能吗 我不想使用SpringSecurity(即ACEGI)的内置功能Java 如何使用SpringWebMVC实现注销特性,java,spring,spring-mvc,Java,Spring,Spring Mvc,我是SpringWebMVC的新手 我可以得到一些示例或在线链接来演示如何使用SpringWebMVC实现注销功能吗 我不想使用SpringSecurity(即ACEGI)的内置功能 提前感谢…您只需使会话无效,用户即可注销。servlet api直接支持这一点:。您可以编写一个只调用invalidate的控制器 class Logout implements Controller{ public ModelAndView handleRequest(HttpServletRequest re
提前感谢…您只需使会话无效,用户即可注销。servlet api直接支持这一点:。您可以编写一个只调用invalidate的控制器
class Logout implements Controller{
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response){
ModelAndView view = //?;
request.getSession().invalidate();
return view;
}
}
会话无效的技巧不起作用。Spring身份验证似乎将会话ID缓冲在某个位置,即使会话无效,也会接受COOKIE 另一种解决方案是手动清除Spring安全上下文:
public void manualLogout() {
SecurityContextHolder.getContext().setAuthentication(null);
}
下面是代码,如何手动登录用户(如果有人需要):
其中authenticationProvider是spring配置中实现的bean
org.springframework.security.authentication.AuthenticationProvider
请使用上述代码实现注销过滤器如果会话仍处于活动状态,您可以使用getSession()进行检查。或者在会话中查看身份验证信息。您必须在拦截器或每个控制器中执行此操作。您可能还需要清除您设置的任何cookie,以支持“记住我”功能。否则,您将在下次访问该站点时立即重新登录。会话过期时,它将如何重定向到登录页面。请您提供另一个场景。
org.springframework.security.authentication.AuthenticationProvider
@Controller
public class LogoutController {
@RequestMapping(value="/logout",method = RequestMethod.GET)
public String logout(HttpServletRequest request){
HttpSession httpSession = request.getSession();
httpSession.invalidate();
return "redirect:/";
}
}