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

来源:互联网 发布:什么直播软件最好 编辑:程序博客网 时间:2024/06/10 12:09
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;}}@Overrideprotected void postHandle(ServletRequest request, ServletResponse response)throws Exception {logger.info("====后处理/后置返回处理");// System.out.println("====后处理/后置返回处理");}@Overridepublic 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;}}}

0 0
原创粉丝点击