|
@@ -31,11 +31,11 @@ import com.iamberry.wechat.tools.NameUtils;
|
|
|
*/
|
|
|
@WebFilter(value = { "/wechat/*","/pay/goOrderInfo" })
|
|
|
public class WechatFilter implements Filter {
|
|
|
-
|
|
|
+
|
|
|
private static Logger logger = LoggerFactory.getLogger(WechatFilter.class);
|
|
|
|
|
|
public void doFilter(ServletRequest request, ServletResponse response,
|
|
|
- FilterChain chain) throws IOException, ServletException {
|
|
|
+ FilterChain chain) throws IOException, ServletException {
|
|
|
// 权限拦截类
|
|
|
HttpServletRequest req = (HttpServletRequest) request;
|
|
|
HttpServletResponse resp = (HttpServletResponse) response;
|
|
@@ -49,12 +49,12 @@ public class WechatFilter implements Filter {
|
|
|
chain.doFilter(req, resp);
|
|
|
return;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
// 请求数据URI,并去掉"/" + 项目名称
|
|
|
String query = req.getQueryString();
|
|
|
String urlstr = req.getRequestURI().toString();
|
|
|
String redirectUrl = urlstr.replace(req.getContextPath(), "");
|
|
|
-
|
|
|
+
|
|
|
// 如果没有登录,并且来自于微信,请求的链接并且为/wechat/qrcode/xxxx,那么放过,保证可以保持机器信息
|
|
|
String ua = req.getHeader("user-agent").toLowerCase();
|
|
|
if( ua.indexOf("micromessenger") < 0 && urlstr.indexOf("wechat/qrcode") > 0) {
|
|
@@ -66,11 +66,11 @@ public class WechatFilter implements Filter {
|
|
|
if (query != null) redirectUrl = redirectUrl + "?" + query;
|
|
|
req.getSession().setAttribute(NameUtils.redirectUrl, redirectUrl);
|
|
|
String url = WechatUtils.getOpenIdFunction();
|
|
|
-
|
|
|
+
|
|
|
// 判断请求,如果来自于Ajax,那么不能直接转发,否则JS前端报错,如果来自Ajax,那么报错请求页面的Referer,此为转发请求回调成功后跳转地址
|
|
|
String requestedWith = req.getHeader("x-requested-with");
|
|
|
String accept = req.getHeader("accept");
|
|
|
- if ((StringUtils.isNotEmpty(requestedWith) && requestedWith.indexOf("XMLHttpRequest") != -1)
|
|
|
+ if ((StringUtils.isNotEmpty(requestedWith) && requestedWith.indexOf("XMLHttpRequest") != -1)
|
|
|
|| (StringUtils.isNotEmpty(accept) && accept.indexOf("json") != -1)) {
|
|
|
// 如果当前用户没有登录,并且浏览器期望的是返回JSON格式的数据,那么进行拼装,并且直接write
|
|
|
String redirectURL = req.getHeader("Referer");
|