这是整个的一个流程(按自己的理解所写的)
1:首先确定好搭建好ssm框架
2:首先确保有微信公众号的资源
第一步
wechat的Controlller 以及wechat的util帮助类文档放入项目之中
第二步
拦截器的开始
/**
* renrenbx
*/
package com.huzhu.mobile.interceptor;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.annotation.AnnotationUtils;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import com.huzhu.commons.cache.Cache;
import com.huzhu.commons.util.JsonUtil;
import com.huzhu.commons.util.ToolUtil;
import com.huzhu.mobile.annotation.WeChatIgnoreAnnotation;
import com.huzhu.mobile.configuration.EnvironConfig;
/**
* 获取微信信息
*/
public class WeChatInterceptor extends HandlerInterceptorAdapter {
private final Logger logger = LoggerFactory
.getLogger(WeChatInterceptor.class);
@Autowired
private Cache cache;
@SuppressWarnings("rawtypes")
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
List<String> corsOriginList = new ArrayList<>();
String curOrigin = request.getHeader("Origin");
logger.info("当前访问来源是:{}", curOrigin);
if (EnvironConfig.getInstance().getEnvironment()
.getProperty("sys.mode").equals("pro")) {
corsOriginList.add("http://m1.renrenbx.com");
corsOriginList.add("https://m1.renrenbx.com");
} else {
corsOriginList.add("http://localhost:8081");
corsOriginList.add(curOrigin);
}
if (curOrigin != null && (corsOriginList.contains(curOrigin))) {
response.setHeader("Access-Control-Allow-Origin", curOrigin);
response.setHeader("Access-Control-Allow-Headers",
"X-Requested-With,content-type,token");
response.setHeader("Access-Control-Allow-Methods",
"GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, PATCH");
}
logger.info("WeChatInterceptor requrl:" + request.getRequestURL()
+ " requri:" + request.getRequestURI());
HandlerMethod handlerMethod = (HandlerMethod) handler;
String openId = "";
// 是否忽略微信认证请求
WeChatIgnoreAnnotation ignoreAnnotation = AnnotationUtils
.findAnnotation(handlerMethod.getMethod(),
WeChatIgnoreAnnotation.class);
if (ignoreAnnotation != null) {
return true;
}
String cacheValue = ToolUtil.getMobileSessionId(request);
if (StringUtils.isBlank(cacheValue)) {
cacheValue = ToolUtil.setMobileSessionId(request, response);
}
// 判断有没有微信的信息
logger.info("WeChatInterceptor cacheValue ------------------------------------------->"
+ cacheValue);
Object value = cache.get("__key_wechat_openid_" + cacheValue);
logger.info("WeChatInterceptor value ------------------------------------------->"
+ value);
if (value == null) {
String url = request.getRequestURI() + "?"
+ request.getQueryString();
String urlParam = URLEncoder.encode(url, "UTF8");
response.sendRedirect(EnvironConfig.getInstance().getString(
"sys.basicurl")
+ "/wechat/oauth?referer=" + urlParam);
return false;
}
Map map = JsonUtil.fromJson2Map((String) value);
request.setAttribute("wxOpenId", map.get("openId"));
request.setAttribute("wxNickname", map.get("nickname"));
request.setAttribute("wxHeadimgurl", map.get("headimgurl"));
openId = map.get("openId").toString();
logger.info("WeChatInterceptor openId ------------------------------------------->"
+ openId);
return true;
}
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex)
throws Exception {
}
private void setUserInfo(String uid, HttpServletRequest request) {
}
}
主要来说 就是对拦截的信息做判读语句和语法 这里的拦截所有 直接进入微信的里面
第三步
模拟测试 是否进入到微信里面 是否判读
详细代码项目 私聊 !!!