/* * ******************************************************************************************************************** * * iFHS7. * ;BBMBMBMc rZMBMBR BMB * MBEr:;PBM, 7MBMMEOBB: BBB RBW * XK: BO SB. :SZ MBM. c;; ir BBM :FFr :SSF: ;xBMB:r iuGXv. i:. iF2; * DBBM0r. :D S7 ;XMBMB GMBMu. MBM: BMB MBMBBBMBMS WMBMBMBBK MBMBMBM BMBRBMBW .MBMBMBMBB * :JMRMMD .. , 1MMRM1; ;MBMBBR: MBM ;MB: BMB: MBM. RMBr sBMH BM0 UMB, BMB. KMBv * ;. XOW B1; :uM: 1RE, i .2BMBs rMB. MBO MBO JMB; MBB MBM BBS 7MBMBOBM: MBW :BMc * OBRJ.SEE MRDOWOR, 3DE:7OBM . ;BMB RMR7BM BMB MBB. BMB ,BMR .BBZ MMB rMB, BMM rMB7 * :FBRO0D0 RKXSXPR. JOKOOMPi BMBSSWBMB; BMBB: MBMB0ZMBMS .BMBOXRBMB MBMDE RBM2;SMBM; MBB xBM2 * iZGE O0SHSPO. uGZ7. sBMBMBDL :BMO OZu:BMBK, rRBMB0; ,EBMB xBMBr:ER. RDU :OO; * ,BZ, 1D0 RPSFHXR. xWZ .SMr . .BBB * :0BMRDG RESSSKR. 2WOMBW; BMBMR * i0BM: SWKHKGO MBDv * .UB OOGDM. MK, Copyright (c) 2015-2019. 斯伯坦机器人 * , XMW .. * r All rights reserved. * * ******************************************************************************************************************** */ package com.sybotan.service import org.slf4j.LoggerFactory import javax.servlet.http.Cookie import javax.servlet.http.HttpServletRequest import javax.servlet.http.HttpServletResponse import javax.servlet.http.HttpSession /** * 页面上下文 * * @author 庞利祥 */ object SPageContext { // 日志记录器 private val logger = LoggerFactory.getLogger(SPageContext::class.java) // 客户端请求对象") private val request = ThreadLocal() // 服务器应答对象") private val response = ThreadLocal() var domain = "sybotan" /** * 获得客户端请求对象 * * @return 返回客户端请求对象 */ fun getRequest(): HttpServletRequest { return request.get() } // Fun getRequest() /** * 设置客户端请求对象 * * @param req 客户端请求对象 */ fun setRequest(req: HttpServletRequest) { request.set(req) return } // Fun setRequest() /** * 释放保存客户端请求对象的变量 */ fun removeRequest() { request.remove() return } // Fun removeRequest() /** * 获得服务器应答对象 * * @return 服务器应答对象 */ fun getResponse(): HttpServletResponse { return response.get() } // Fun getRequest() /** * 设置服务器应答对象 * * @param resp 服务器应答对象 */ fun setResponse(resp: HttpServletResponse) { response.set(resp) return } // Fun setRequest() /** * 释放保存服务器应答对象的变量 */ fun removeResponse() { response.remove() return } // Fun removeRequest() /** * 获得客户端会话对象 * * @return 返回客户端会话对象 */ fun getSession(): HttpSession? { val req = request.get() return req?.session } // Fun getSession() /** * 获得保存在客户端会话中的指定属性 * * @param name 属性名 * @return 返回保存在客户端会话中的指定属性 */ fun getAttribute(name: String): Any? { val session = getSession() return session?.getAttribute(name) } // Fun getAttribute() /** * 设置保存在客户端会话中的指定属性 * * @param name 属性名 * @param object 值 */ fun setAttribute(name: String, `object`: Any) { val session = getSession() session?.setAttribute(name, `object`) return } // Fun setAttribute() /** * 移除保存在客户端会话中的指定属性 * * @param name 属性名 */ fun removeAttribute(name: String) { val session = getSession() session?.removeAttribute(name) return } // Fun removeAttribute() /** * 移除保存在客户端会话中的所有属性 */ fun removeAllAttribute() { val session = getSession() ?: return val nameList = session.attributeNames while (nameList.hasMoreElements()) { val name = nameList.nextElement() session.removeAttribute(name) } return } // Fun removeAllAttribute() /** * 获得cookie * * @param name cookie名 * @return cookie */ fun getCookie(name: String): Cookie? { val request = getRequest() val cookieList = request.cookies if (null != cookieList) { for (cookie in cookieList) { if (name.compareTo(cookie.name) == 0) { return cookie } } } return null } // Fun getCookie() /** * 添加cookie * * @param name cookie名称 * @param value cookie值 */ fun setCookie(name: String, value: String) { val response = getResponse() val cookie = Cookie(name, value) cookie.domain = domain cookie.path = "/" cookie.maxAge = 365 * 24 * 3600 // cookie最大生命周期1年 response.addCookie(cookie) return } // Fun setCookie() /** * 删除cookie * * @param name cookie名称 */ fun removeCookie(name: String) { val response = getResponse() val cookie = Cookie(name, null) cookie.domain = domain cookie.path = "/" cookie.maxAge = 0 response.addCookie(cookie) return } // Fun addCookie() /** * 获得请求头 * * @param name 请求头名 * @return 请求头内容 */ fun getHeader(name: String): String? { val request = getRequest() return request.getHeader(name) } // Fun getHeader() /** * 获得客户端的IP地址 * * @return 客户端的IP地址 */ fun getRequestIp(): String { val request = getRequest() var ip: String? = request.getHeader("x-forwarded-for") if (null == ip || ip.isEmpty() || ip.equals("unknown", ignoreCase = true)) { ip = request.getHeader("Proxy-Client-IP") } if (null == ip || ip.isEmpty() || ip.equals("unknown", ignoreCase = true)) { ip = request.getHeader("WL-Proxy-Client-IP") } if (null == ip || ip.isEmpty() || ip.equals("unknown", ignoreCase = true)) { ip = request.getHeader("HTTP_CLIENT_IP") } if (null == ip || ip.isEmpty() || ip.equals("unknown", ignoreCase = true)) { ip = request.getHeader("HTTP_X_FORWARDED_FOR") } if (null == ip || ip.isEmpty() || ip.equals("unknown", ignoreCase = true)) { ip = request.remoteAddr if (ip!!.contains(":")) { ip = "127.0.0.1" } } return ip } // Fun getRequestIp() } // Object SPageContext