发表于: 2018-02-02 23:02:32

3 571


今天完成的事

完成拦截器的代码编写

public class UserInterceptor extends HandlerInterceptorAdapter{


private static final Log log = LogFactory.getLog(UserInterceptor.class);

   @Autowired
   private UserService userService;

   public static String SPLITTER_REGEX = "\\|";

   public static final String USER_ID = "userId";

   @Autowired
   private CookieUtil cookieUtil;

   @Override
   public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception{
//使用枚举类打印出request中所有参数
       log.info(" request uri: " + request.getRequestURI());
       log.info("request token" + request.getHeader("token"));
       Enumeration<String> names = request.getParameterNames();
       log.info("the token is:" + request.getParameter("token"));
       while (names.hasMoreElements()) {
String name = names.nextElement();
           String value = request.getParameter(name);
           log.info(" Parameter  name : " + name + " value : " + value);
        }
//request获取名为token的参数
       String token = request.getParameter("token");
       //如果没取到就尝试从请求头获取
       if(token == null){
token = request.getHeader("token");
       }
log.info("get the token in request:"+token);
       //token中获取用户信息
       if(token != null){
Map map = this.decodeCookie(token);
           log.info("the map is :"+map);
           Long uid = null;
           User user = null;
           //Map中获取用户信息
           if(map != null){
uid = (Long) map.get(USER_ID);
               log.info("get the user id :"+uid);
           }else {
log.info("the map is null");
              return noLogin(request,response);
           }
//判断用户状态
           if(uid != null){
user = userService.getObjectById(uid);
               log.info("get the user :"+user);
               if(user != null){
if (user.getStatus().equals(Constant.FROZEN)){
log.info("the user is frozen");
                     return userOff(request,response);
                   }
//将用户信息放到request
                   request.setAttribute("user", user);
               }else {
log.info("the user is not exist");
                   return noLogin(request,response);
               }
}else {
log.info("the user id is null");
               return noLogin(request,response);
           }
}else {
//cooke中获取uid
           Long uid = cookieUtil.getID(request);
           log.info("the user id is :"+uid);
           if(uid == null){
log.info("the user id is null");
               return noLogin(request,response);
           } else {
log.info("get the user id from cookie:"+uid);
               User user = userService.getObjectById(uid);
               if(user == null){
log.info("the user is not exist");
                   return noLogin(request,response);
               }else {
if(user.getStatus().equals(Constant.FROZEN)){
log.info("the user is frozen");
                       return userOff(request,response);
                   }
log.info("get the user :"+user);
                   request.setAttribute("user",user);
               }
log.info("get uid is " + uid);
               return true;
           }
}
return true;
   }



private Map decodeCookie(String value) {
if (StringUtils.isBlank(value)) {
log.info("the value can not be null");
           return null;
       }
try {
String[] p = value.split(SPLITTER_REGEX);
           Long userId = new Long(p[0]);
           String crypt = p[1];
           String plainUserInfo = UserCryptUtil.userDecrypt(crypt);
           String userName = UserCryptUtil.getUserNameFromPlain(plainUserInfo);
           Long uid = UserCryptUtil.getUserIdFromPlain(plainUserInfo);
           if (userId.equals(uid)) {
log.info("get the userInfo from token");
               return getUserIdentity(userName, userId);
           }
} catch (Exception e) {
e.printStackTrace();
           log.error("Wrong cookie format: [" + value + "] message is:" + e.getMessage());
           return null;
       }
return  null;
   }


public static Map getUserIdentity(String userName, Long userId) {
Map map = new HashMap();
       map.put(CookieUtil.USER_NAME, userName);
       map.put(CookieUtil.USER_ID, userId);
       return map;
   }

private Boolean noLogin(HttpServletRequest request,HttpServletResponse response){
log.info(" user don't login");

       RequestDispatcher rd = request.getRequestDispatcher("/r/json/noLogin.json");
       try {
rd.forward(request, response);
       } catch (ServletException e) {
e.printStackTrace();
           log.error("noLogin() error:"+e.getMessage());
       } catch (IOException e) {
e.printStackTrace();
           log.error("noLogin() error:"+e.getMessage());
       }
return false;
   }

private boolean userOff( HttpServletRequest request,HttpServletResponse response)
throws IOException {

log.info(" user is  freeze");
       //清除用户Cookie
       cookieUtil.clearCookie(response);
       RequestDispatcher rd = request.getRequestDispatcher("/r/json/statusOff.json");

       try {
rd.forward(request, response);
       } catch (ServletException e) {
// TODO Auto-generated catch block
           e.printStackTrace();
       } catch (IOException e) {
// TODO Auto-generated catch block
           e.printStackTrace();
       }
return false;

   }
@Override
   public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
                          ModelAndView modelAndView)
throws Exception {

log.info("p =========================================== ");
   }

/**
    * 获取跳转链接的地址
    *
    * @param request
    * @return
    */
   public String getInterceptorUrl(HttpServletRequest request) {

String interceptorUrl = request.getRequestURI()
+ (null == request.getQueryString() ? "" : "?" + request.getQueryString()).toString();
       interceptorUrl = interceptorUrl.replace("/app/", "/");

       log.info("get getInterceptorUrl is " + interceptorUrl);

       return interceptorUrl;
   }



}


遇到的问题:微信登录完全没有思路 好在网上找到了比较好的入门视频 


明天的计划:开始搞微信登录,看了视频之后微信的开发文档也能看的懂了,实现的方法就是使用httpclint执行url,通过code获得access_token,再通过token获取oppenid和微信用户信息


收获:微信登录的实现逻辑


任务进度:微信登录

开始时间:2017.12.12

预计demo时间:2018.02.08

禅道:http://task.ptteng.com/zentao/project-burn-506.htm



返回列表 返回列表
评论

    分享到