日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

用户Session相关模块重构

發布時間:2024/4/13 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用户Session相关模块重构 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
我們就對現有的登陸相關的代碼,進行改造,全部改成單點登陸,廢棄session,那這個廢棄SESSION呢就是廢棄原有servlet里面提供的session,把它放到redis里面,redis里面的session server,其實是一個帶引號的session,我們開始改造,把Session去掉,改成HttpServletRequest,我們更新完之后,我們要把新的信息,set過去,那么現在怎么做呢,其實我們把這個信息重新放回去就可以了,這樣在我們更新用戶信息的時候,更新完之后,我們就會更新這個session,并且設置他的有效期 package com.learn.controller.portal;import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody;import com.learn.common.Const; import com.learn.common.ResponseCode; import com.learn.common.ServerResponse; import com.learn.pojo.User; import com.learn.service.IUserService; import com.learn.util.CookieUtil; import com.learn.util.JsonUtil; import com.learn.util.RedisShardedPoolUtil;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession;/*** * @author Leon.Sun**/ @Controller @RequestMapping("/user/") public class UserController {@Autowiredprivate IUserService iUserService;/*** 用戶登錄* @param username* @param password* @param session* @return*/@RequestMapping(value = "login.do",method = RequestMethod.POST)@ResponseBodypublic ServerResponse<User> login(String username, String password, HttpSession session, HttpServletResponse httpServletResponse){ServerResponse<User> response = iUserService.login(username,password);if(response.isSuccess()){// session.setAttribute(Const.CURRENT_USER,response.getData());CookieUtil.writeLoginToken(httpServletResponse,session.getId());RedisShardedPoolUtil.setEx(session.getId(), JsonUtil.obj2String(response.getData()),Const.RedisCacheExtime.REDIS_SESSION_EXTIME);}return response;}@RequestMapping(value = "logout.do",method = RequestMethod.POST)@ResponseBodypublic ServerResponse<String> logout(HttpServletRequest httpServletRequest,HttpServletResponse httpServletResponse){String loginToken = CookieUtil.readLoginToken(httpServletRequest);CookieUtil.delLoginToken(httpServletRequest,httpServletResponse);RedisShardedPoolUtil.del(loginToken);// session.removeAttribute(Const.CURRENT_USER);return ServerResponse.createBySuccess();}@RequestMapping(value = "register.do",method = RequestMethod.POST)@ResponseBodypublic ServerResponse<String> register(User user){return iUserService.register(user);}@RequestMapping(value = "check_valid.do",method = RequestMethod.POST)@ResponseBodypublic ServerResponse<String> checkValid(String str,String type){return iUserService.checkValid(str,type);}@RequestMapping(value = "get_user_info.do",method = RequestMethod.POST)@ResponseBodypublic ServerResponse<User> getUserInfo(HttpServletRequest httpServletRequest){String loginToken = CookieUtil.readLoginToken(httpServletRequest);if(StringUtils.isEmpty(loginToken)){return ServerResponse.createByErrorMessage("用戶未登錄,無法獲取當前用戶的信息");}String userJsonStr = RedisShardedPoolUtil.get(loginToken);User user = JsonUtil.string2Obj(userJsonStr,User.class);if(user != null){return ServerResponse.createBySuccess(user);}return ServerResponse.createByErrorMessage("用戶未登錄,無法獲取當前用戶的信息");}@RequestMapping(value = "forget_get_question.do",method = RequestMethod.POST)@ResponseBodypublic ServerResponse<String> forgetGetQuestion(String username){return iUserService.selectQuestion(username);}@RequestMapping(value = "forget_check_answer.do",method = RequestMethod.POST)@ResponseBodypublic ServerResponse<String> forgetCheckAnswer(String username,String question,String answer){return iUserService.checkAnswer(username,question,answer);}@RequestMapping(value = "forget_reset_password.do",method = RequestMethod.POST)@ResponseBodypublic ServerResponse<String> forgetRestPassword(String username,String passwordNew,String forgetToken){return iUserService.forgetResetPassword(username,passwordNew,forgetToken);}@RequestMapping(value = "reset_password.do",method = RequestMethod.POST)@ResponseBodypublic ServerResponse<String> resetPassword(HttpServletRequest httpServletRequest,String passwordOld,String passwordNew){ // User user = (User)session.getAttribute(Const.CURRENT_USER);String loginToken = CookieUtil.readLoginToken(httpServletRequest);if(StringUtils.isEmpty(loginToken)){return ServerResponse.createByErrorMessage("用戶未登錄,無法獲取當前用戶的信息");}String userJsonStr = RedisShardedPoolUtil.get(loginToken);User user = JsonUtil.string2Obj(userJsonStr,User.class);if(user == null){return ServerResponse.createByErrorMessage("用戶未登錄");}return iUserService.resetPassword(passwordOld,passwordNew,user);}@RequestMapping(value = "update_information.do",method = RequestMethod.POST)@ResponseBodypublic ServerResponse<User> update_information(HttpServletRequest httpServletRequest,User user){String loginToken = CookieUtil.readLoginToken(httpServletRequest);if(StringUtils.isEmpty(loginToken)){return ServerResponse.createByErrorMessage("用戶未登錄,無法獲取當前用戶的信息");}String userJsonStr = RedisShardedPoolUtil.get(loginToken);User currentUser = JsonUtil.string2Obj(userJsonStr,User.class);if(currentUser == null){return ServerResponse.createByErrorMessage("用戶未登錄");}user.setId(currentUser.getId());user.setUsername(currentUser.getUsername());ServerResponse<User> response = iUserService.updateInformation(user);if(response.isSuccess()){response.getData().setUsername(currentUser.getUsername());RedisShardedPoolUtil.setEx(loginToken, JsonUtil.obj2String(response.getData()),Const.RedisCacheExtime.REDIS_SESSION_EXTIME);}return response;}@RequestMapping(value = "get_information.do",method = RequestMethod.POST)@ResponseBodypublic ServerResponse<User> get_information(HttpServletRequest httpServletRequest){String loginToken = CookieUtil.readLoginToken(httpServletRequest);if(StringUtils.isEmpty(loginToken)){return ServerResponse.createByErrorMessage("用戶未登錄,無法獲取當前用戶的信息");}String userJsonStr = RedisShardedPoolUtil.get(loginToken);User currentUser = JsonUtil.string2Obj(userJsonStr,User.class);if(currentUser == null){return ServerResponse.createByErrorCodeMessage(ResponseCode.NEED_LOGIN.getCode(),"未登錄,需要強制登錄status=10");}return iUserService.getInformation(currentUser.getId());} }

?

總結

以上是生活随笔為你收集整理的用户Session相关模块重构的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。