當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
Spring Session实战
生活随笔
收集整理的這篇文章主要介紹了
Spring Session实战
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在maven里面我們已經把這個類引入進來了,然后接下來我們寫一個類,這個類是什么呢,就是UserController,因為UserController里面已經用Redis的方式實現了,實現的還是Shard分布式的,這里面為了做一個擴展,我們項目還是會用自定義的單點登陸的方式,并且這種是分布式的,為了課程講解,我們copy一個UserController,然后只保留三個,登陸登出,獲取用戶信息,這三個就是存session,刪session,讀session,因為我們很多判斷權限的地方,是直接從session里面拿的,非常簡單,這個就叫UserSpringSessionController,都是用servlet提供的一個session,我們來看session是如何被Spring Session包裝的,體會對業務沒有侵入的session框架,現在我們來配置這個Spring Session,從第一個方面,第一個是web.xml,增加一個filter節點,<!-- spring session框架和自己實現的redis二選一 --><filter><filter-name>springSessionRepositoryFilter</filter-name><filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class></filter><filter-mapping><filter-name>springSessionRepositoryFilter</filter-name><url-pattern>*.do</url-pattern></filter-mapping>委托的過濾器代理,我們使用DelegatingFilterProxy
package com.learn.controller.portal;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;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.ServerResponse;
import com.learn.pojo.User;
import com.learn.service.IUserService;/*** * @author Leon.Sun**/
@Controller
@RequestMapping("/user/springsession/")
public class UserSpringSessionController {@Autowiredprivate IUserService iUserService;/*** 用戶登錄* @param username* @param password* @param session* @return*/@RequestMapping(value = "login.do",method = RequestMethod.GET)@ResponseBodypublic ServerResponse<User> login(String username, String password, HttpSession session, HttpServletResponse httpServletResponse){//測試全局異常
// int i = 0;
// int j = 666/i;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.GET)@ResponseBodypublic ServerResponse<String> logout(HttpSession session,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 = "get_user_info.do",method = RequestMethod.GET)@ResponseBodypublic ServerResponse<User> getUserInfo(HttpSession session,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);User user = (User)session.getAttribute(Const.CURRENT_USER);if(user != null){return ServerResponse.createBySuccess(user);}return ServerResponse.createByErrorMessage("用戶未登錄,無法獲取當前用戶的信息");}
}
?
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生總結
以上是生活随笔為你收集整理的Spring Session实战的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring Session官方介绍及s
- 下一篇: Spring Session实战2