骑着猪猪去逛街的gravatar头像
骑着猪猪去逛街 2014-07-29 18:28:46

Springmvc用户注销退出登录功能疑问

Springmvc框架用户登录后记录到Session中


 


@Controller
@RequestMapping({ "/user" })
@SessionAttributes({ GlobalConstants.USER_SESSION })
public class UserController {
	@Autowired
	private UserService userService;

	@ResponseBody
	@RequestMapping("/login")
	public String login(ModelMap model, String email, String password) {
		User user = userService.findUserByEmail(email);
	
				SessionStruct session = new SessionStruct();
				session.setUser(user);
				model.addAttribute(GlobalConstants.USER_SESSION, session);
				return "";
	
	}
	
	@RequestMapping(value = "/loginout", method = RequestMethod.GET)
	public String loginOut(HttpServletRequest request,@ModelAttribute(GlobalConstants.USER_SESSION) SessionStruct session) {
		// 清除session
		Enumeration<String> em = request.getSession().getAttributeNames();
		while (em.hasMoreElements()) {
			request.getSession().removeAttribute(em.nextElement().toString());
		}
		request.getSession().removeAttribute(GlobalConstants.USER_SESSION);
		request.getSession().invalidate();
		String path = request.getContextPath();
		// 拼接跳转页面路径
		String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
		System.out.println(request.getSession().getAttribute(GlobalConstants.USER_SESSION));
		return "redirect:" + basePath;
	}
	


}

我的和牛哥的不同之处可能是session是通过注解注入的,牛哥的应该是通过request拿的吧?

 

    <li >欢迎 <c:out value="${sessionScope.USER_SESSION.user.username }"></c:out></li>

 

清楚之后username依然能够在页面显示。。。

所有回答列表(3)
最代码官方的gravatar头像
最代码官方  LV167 2014年7月29日

给你分享下最代码的登录和退出代码片段:

登陆成功代码片段:

session.setAttribute(GlobalConstants.SESSION_LOGIN_USER_NAME, user);

退出登录代码片段:

User user = (User) session.getAttribute(GlobalConstants.SESSION_LOGIN_USER_NAME);
session.removeAttribute(GlobalConstants.SESSION_LOGIN_USER_NAME);
response.sendRedirect("/");

如果有cookie的操作,则需要登录的时候写入cookie,代码如下:

Cookie cookie = new Cookie(GlobalConstants.COOKIE_NAME_ZUIDAIMA_ID,Security.encryptUserId(userId));
cookie.setPath("/");
cookie.setDomain(".zuidaima.com");
cookie.setMaxAge(60 * 60 * 24 * 365 * 10);

退出的时候需要删除该cookie

Cookie cookie = new Cookie(GlobalConstants.COOKIE_NAME_ZUIDAIMA_ID,Security.encryptUserId(userId));
cookie.setPath("/");
cookie.setDomain(".zuidaima.com");
cookie.setMaxAge(0);

注意:删除客户端cookie只需要设置cookie的max age值为0,并且必须给客户端response时set cookie才会删除。

评论(12) 最佳答案
bruce的gravatar头像
bruce  LV4 2014年7月30日

cryinggreat UE

zakari的gravatar头像
zakari  LV12 2014年7月30日

session.clear()   好像有这个方法吧

顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友