生活随笔
收集整理的這篇文章主要介紹了
解决2次查询User的问题(ThreadLocal)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
通過token進(jìn)行了2次查詢
一次是在攔截器中查詢,一次是在Controller查詢,存在性能和資源浪費問題。
?
如何將攔截器中的數(shù)據(jù)傳遞到Controller?
?
方案:
將User對象放置到request對象中使用ThreadLocal實現(xiàn) 進(jìn)入tomcat和產(chǎn)生響應(yīng)前,都處于同一個線程中
package com.learn.web.interceptors;import com.learn.common.utils.CookieUtils;
import com.learn.sso.query.bean.User;
import com.learn.web.service.UserService;
import com.learn.web.threadlocal.UserThreadLocal;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;public class UserLoginHandlerInterceptorimplements HandlerInterceptor
{public static final String COOKIE_NAME = "TT_TOKEN";@Autowiredprivate UserService userService;public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)throws Exception{String loginUrl = this.userService.LEARN_SSO_URL + "/user/login.html";String token = CookieUtils.getCookieValue(request, "TT_TOKEN");if (StringUtils.isEmpty(token)){response.sendRedirect(loginUrl);return false;}User user = this.userService.queryByToken(token);if (null == user){response.sendRedirect(loginUrl);return false;}UserThreadLocal.set(user);return true;}public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)throws Exception{}public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)throws Exception{UserThreadLocal.set(null);}
}
package com.learn.web.threadlocal;import com.learn.sso.query.bean.User;public class UserThreadLocal
{private static final ThreadLocal<User> LOCAL = new ThreadLocal();public static void set(User user){LOCAL.set(user);}public static User get() {return (User)LOCAL.get();}
}
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
總結(jié)
以上是生活随笔為你收集整理的解决2次查询User的问题(ThreadLocal)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。