对于shiro拦截器重写结合小窗口登录

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;
		}
	}
}

猜你喜欢

转载自blog.csdn.net/a137268431/article/details/44021233
今日推荐