package com.ultrapower.rw.web.ows.filter; import java.io.UnsupportedEncodingException; import java.util.Map; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import net.sf.json.JSONObject; import org.apache.log4j.Logger; import org.apache.shiro.web.servlet.AdviceFilter; import com.ultrapower.rw.web.ows.util.IsEmptyUtil; import com.ultrapower.rw.web.ows.util.TsBalanceSignUtil; public class MyAdviceFilter extends AdviceFilter { private Logger logger = Logger.getLogger(MyAdviceFilter.class); @Override @SuppressWarnings("unchecked") protected boolean preHandle(ServletRequest request, ServletResponse response) throws Exception { JSONObject jsonObj = new JSONObject(); String redirect_url = ""; HttpServletRequest httpReq = (HttpServletRequest) request; HttpServletResponse httpRes = (HttpServletResponse) response; httpReq.setCharacterEncoding("utf-8"); // =====================判断是否清除缓存=============================== HttpSession session=httpReq.getSession(); String jsessionid=session.getId(); logger.info("登录的sessionid:"+jsessionid); Object obj = session.getAttribute("userId"); logger.info("userId数据:"+obj); // =====================获得get的地址和后面的参数===================== String urlStr = httpReq.getRequestURI(); String reqQueryString = httpReq.getQueryString();// 获得问号后面的参数 if (!IsEmptyUtil.empty(reqQueryString)) { redirect_url = urlStr + "?" + reqQueryString; } else { redirect_url = urlStr; } if (obj == null) {// 判断是否已经登录 String ajaxFlag = httpReq.getHeader("x-requested-with");// 获得ajax标示 XMLHttpRequest // 去掉最后一个空格 if (ajaxFlag != null) {// ajax提交 logger.info("ajax 提交"); String acceptStr=httpReq.getHeader("Accept"); String method=httpReq.getMethod(); // 获得post的参数,不需要编码 String queryString = ""; Map<String, String[]> params = httpReq.getParameterMap(); for (String key : params.keySet()) { String[] values = params.get(key); for (int i = 0; i < values.length; i++) { String value = values[i]; queryString += key + "=" + value + "&"; // queryString +="\"" +key+ "\""+ ":" +"\""+ value+"\"" // + ","; } } // 返回ajax的请求参数 if (!IsEmptyUtil.empty(queryString)) { // queryString = "{"+queryString.substring(0, // queryString.length() - 1)+"}"; queryString = queryString.substring(0, queryString.length() - 1); } //获得请求datatype的类型 if(acceptStr.contains("json")){ jsonObj.put("datatype_flag", "json"); }else if(acceptStr.contains("html")){ jsonObj.put("datatype_flag", "html"); } //获得是post还是get方法 if(method.equalsIgnoreCase("post")){ jsonObj.put("request_method", "post"); }else if(method.equalsIgnoreCase("get")){ jsonObj.put("request_method", "get"); } jsonObj.put("smallwin_flag", "Y"); jsonObj.put("ajaxFlag", "Y"); jsonObj.put("redirect_url", redirect_url); jsonObj.put("paramsStr", queryString); jsonObj.put("jsessionid", jsessionid); response.setCharacterEncoding("UTF-8"); response.getWriter().write(jsonObj.toString()); } else {// form 提交 logger.info("form 提交"); String queryString = ""; Map<String, String[]> params = httpReq.getParameterMap(); for (String key : params.keySet()) { String[] values = params.get(key); for (int i = 0; i < values.length; i++) { String value = values[i]; queryString +="{\'name\'"+ ":" +"\'"+ key+"\'" + ","; queryString +="\'value\'"+ ":" +"\'"+ value+"\'" + "},"; } } // 返回ajax的请求参数 if (!IsEmptyUtil.empty(queryString)) { queryString = "["+queryString.substring(0, queryString.length() - 1)+"]"; } // String queryString = ""; // Map<String, String[]> params = httpReq.getParameterMap(); // for (String key : params.keySet()) { // String[] values = params.get(key); // for (int i = 0; i < values.length; i++) { // String value = values[i]; // queryString += key + "=" + value + "&"; // } // } // if (!IsEmptyUtil.empty(queryString)) { // if (IsEmptyUtil.empty(reqQueryString)) { // queryString = "?" // + queryString.substring(0, // queryString.length() - 1); // } else { // queryString = reqQueryString // + queryString.substring(0, // queryString.length() - 1); // } // } // request.setAttribute("redirect_url", redirect_url); // request.setAttribute("redirect_params", queryString); // request.setAttribute("redirect_params", "[{'name':'name','value':'123'}]"); // request.getRequestDispatcher("/anon_login.jsp").forward( // request, response); // httpRes.setContentType("text/html; charset=utf8"); // httpRes.setStatus(307); // httpRes.setHeader("Location","/anon_login.jsp?redirect_url="+redirect_url // +"&redirect_params="+queryString); // httpRes.sendRedirect("/anon_login.jsp?redirect_url="+redirect_url); // httpRes.setStatus(307); // httpRes.setHeader("Location","/anon_login.jsp?redirect_url="+redirect_url // +"&redirect_params="+queryString); httpRes.sendRedirect("/anon_login.jsp?redirect_url="+redirect_url); } return false; } else { return true; } } @Override protected void postHandle(ServletRequest request, ServletResponse response) throws Exception { logger.info("====后处理/后置返回处理"); // System.out.println("====后处理/后置返回处理"); } @Override public void afterCompletion(ServletRequest request, ServletResponse response, Exception exception) throws Exception { logger.info("====完成处理/后置最终处理"); // System.out.println("====完成处理/后置最终处理"); } /** * 用于区别get或post提交的编码 * * @param param * @param request * @return * @throws UnsupportedEncodingException */ private String getEncodingName(String param, HttpServletRequest request) throws UnsupportedEncodingException { String method = request.getMethod(); if ("GET".equalsIgnoreCase(method)) { return new String(param.getBytes("ISO-8859-1"), "UTF-8"); } else { return param; } } }
对于shiro拦截器重写结合小窗口登录
猜你喜欢
转载自blog.csdn.net/a137268431/article/details/44021233
今日推荐
周排行