Commit ce8125f4 by 陶光胜

init

parent 8fd51e6c
package com.gic.enterprise.context;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class RequestContext {
private ThreadLocal<HttpServletRequest> requestThreadLocal = new ThreadLocal<>();
private ThreadLocal<HttpServletResponse> responseThreadLocal = new ThreadLocal<>();
private static RequestContext requestContext = new RequestContext();
public static RequestContext getContext(){
return requestContext;
}
public void init(HttpServletRequest request, HttpServletResponse response){
requestThreadLocal.set(request);
responseThreadLocal.set(response);
}
public void destroy(){
requestThreadLocal.remove();
responseThreadLocal.remove();
}
public HttpServletRequest getRequest(){
return requestThreadLocal.get();
}
public HttpServletResponse getResponse(){
return responseThreadLocal.get();
}
}
package com.gic.enterprise.context;
import com.gic.commons.util.ToolUtil;
import com.gic.enterprise.constants.Constants;
import com.gic.enterprise.utils.UserDetail;
import com.gic.redis.data.util.RedisUtil;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.concurrent.TimeUnit;
public class UserContext {
public static final Long expireLength = 1l;
private static UserContext userContext = new UserContext();
public static UserContext getContext(){
return userContext;
}
public UserDetail get(){
String key = Constants.TOKEN_KEY + getToken();
Object cache = RedisUtil.getCache(key);
if(cache != null){
return (UserDetail) cache;
}
return new UserDetail();
}
public void init(UserDetail userDetail){
String uuId = ToolUtil.randomUUID();
String key = Constants.TOKEN_KEY+uuId;
RedisUtil.setCache(key, userDetail, expireLength, TimeUnit.HOURS);
Cookie cookie = new Cookie(Constants.USER_TOKEN, uuId);
cookie.setPath("/");
HttpServletResponse response = RequestContext.getContext().getResponse();
if(response != null){
response.addCookie(cookie);
}
}
public void refresh(){
String key = Constants.TOKEN_KEY + getToken();
RedisUtil.getRedisClient().getBucket(key).expire(expireLength, TimeUnit.HOURS);
}
public void destory(){
String key = Constants.TOKEN_KEY + getToken();
RedisUtil.delCache(key);
}
public String getToken(){
String token = null;
HttpServletRequest request = RequestContext.getContext().getRequest();
if (request != null){
Cookie[] cookies = request.getCookies();
if(cookies != null){
for (Cookie cookie : cookies) {
if (Constants.USER_TOKEN.equals(cookie.getName())) {
token = cookie.getValue();
break;
}
}
}
}
return token;
}
}
package com.gic.enterprise.filter;
import com.alibaba.fastjson.JSON;
import com.gic.enterprise.utils.UserDetailUtils;
import org.apache.dubbo.common.constants.CommonConstants;
import org.apache.dubbo.common.extension.Activate;
......@@ -13,7 +14,7 @@ public class UserDetailFilter implements Filter {
public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
RpcContext context = RpcContext.getContext();
Map<String, String> attachments = context.getAttachments();
//UserDetailUtils.setUserDetail(attachments.get("userDetail"));
System.out.println("filter attachments"+ JSON.toJSONString(attachments));
return invoker.invoke(invocation);
}
}
package com.gic.enterprise.utils;
import com.alibaba.fastjson.JSON;
import com.gic.commons.util.ToolUtil;
import com.gic.commons.web.RequestThreadLocal;
import com.gic.commons.web.ResponseThreadLocal;
import com.gic.commons.web.ex.ErrorEnum;
import com.gic.commons.web.ex.GicApiException;
import com.gic.enterprise.constants.Constants;
import com.gic.redis.data.util.RedisUtil;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import java.util.concurrent.TimeUnit;
import com.gic.enterprise.context.UserContext;
public class UserDetailUtils {
public static UserDetail getUserDetail(){
HttpServletRequest request = RequestThreadLocal.get();
if (request != null){
Cookie[] cookies = request.getCookies();
if(cookies != null){
String token = null;
for (Cookie cookie : cookies) {
if (Constants.USER_TOKEN.equals(cookie.getName())) {
token = cookie.getValue();
break;
}
}
String key = Constants.TOKEN_KEY+token;
Object cache = RedisUtil.getCache(key);
if(cache != null){
return (UserDetail) cache;
}
}
}
return new UserDetail();
return UserContext.getContext().get();
}
public static void setUserDetail(UserDetail userDetail){
String uuId = ToolUtil.randomUUID();
String key = Constants.TOKEN_KEY+uuId;
RedisUtil.setCache(key, userDetail, 1l, TimeUnit.HOURS);
Cookie cookie = new Cookie(Constants.USER_TOKEN, uuId);
cookie.setPath("/");
ResponseThreadLocal.get().addCookie(cookie);
UserContext.getContext().init(userDetail);
}
}
package com.gic.enterprise.interceptor;
import com.gic.enterprise.constants.Constants;
import com.gic.enterprise.context.UserContext;
import com.gic.enterprise.utils.UserDetail;
import com.sun.tools.internal.xjc.reader.xmlschema.bindinfo.BIConversion;
import org.apache.dubbo.rpc.RpcContext;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
......@@ -16,6 +21,8 @@ public class AuthInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object object) throws Exception {
String token = UserContext.getContext().getToken();
RpcContext.getContext().set(Constants.USER_TOKEN, token);
return true;
}
}
......@@ -2,6 +2,7 @@ package com.gic.enterprise.interceptor;
import com.gic.commons.web.RequestThreadLocal;
import com.gic.commons.web.ResponseThreadLocal;
import com.gic.enterprise.context.RequestContext;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import javax.servlet.http.HttpServletRequest;
......@@ -19,16 +20,14 @@ public class RequestInteceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object object) throws Exception {
RequestThreadLocal.set(request);
ResponseThreadLocal.set(response);
RequestContext.getContext().init(request, response);
return true;
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
RequestThreadLocal.remove();
ResponseThreadLocal.remove();
RequestContext.getContext().destroy();
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment