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拦截器重写结合小窗口登录
最新推荐文章于 2023-04-24 17:13:12 发布