对于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
- 对于shiro拦截器重写结合小窗口登录
- 小窗口登录对于jquery—ajax重写
- Shiro 结合 kcaptcha实现登录验证
- shiro结合cas实现单点登录
- Shiro结合JWT实现单点登录
- Shiro 处理ajax请求 拦截登录超时 解决!
- shiro获取登录前被拦截地址 (个人备份)
- Shiro 处理ajax请求 拦截登录超时---解决!
- Spring Boot 结合shiro做第三方登录验证
- Spring Boot 结合shiro做第三方登录验证
- 初学登录拦截器小例子
- java拦截器实现强制登录(结合struts2)
- ajaxsetup,结合拦截器处理session过期,跳转登录页面
- OkHttp学习(2)-->>异步下载图片、文件(拦截器重写Response方法实现下载进度获取)
- List Contains 比较器重写
- SSM+Shiro写的一个简单的登录验证
- 关于springMVC拦截器重复调用问题
- 弹出登录小窗口的原理
- window.showModalDigl()方法在本页面刷新
- 彻底理解position与anchorPoint
- thinkphp里面,如何给控制器传构造参数
- 506 - System Dependencies
- 第一个只出现一次的字符
- 对于shiro拦截器重写结合小窗口登录
- C3P0连接数据库
- pat 1065
- 开源集合项目
- 链表的常见操作
- 棋盘覆盖问题
- Eclipse最有用的10个快捷键
- 各种各样的client
- 01Appium-Appium官方简介(翻译)