public class ContextHelper{
/**
* 获取当前HttpServletRequest
* @Title: getRequest
* @author: jack_qiu
* @Description: TODO
* @return
*/
public static HttpServletRequest getRequest(){
ServletRequestAttributes attrs = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
if(null!=attrs){
HttpServletRequest request = attrs.getRequest();
return request;
}
return null;
}
/**
* 获取当前session
* @Title: getSession
* @author: jack_qiu
* @Description: TODO
* @return
*/
public static HttpSession getSession(){
ServletRequestAttributes attrs = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
if(null!=attrs){
HttpServletRequest request = attrs.getRequest();
return request.getSession();
}
return null;
}
/**
* 获取当前sessionId
* @Title: getSessionId
* @author: jack_qiu
* @Description: TODO
* @return
*/
public static String getSessionId(){
HttpSession session = getSession();
return null==session?null:session.getId();
}
/**
* 获取当前session中的数据
* @Title: getSessionAttr
* @author: jack_qiu
* @Description: TODO
* @param attrName
* @return
*/
public static Object getSessionAttr(String attrName){
HttpSession session = getSession();
return null==session?null:session.getAttribute(attrName);
}
/**
* 在当前session中设置属性值
* @Title: setSessionAttr
* @author: jack_qiu
* @Description: TODO
* @param attrName
* @param value
*/
public static void setSessionAttr(String attrName,Object value){
HttpSession session = getSession();
if(null!=session){
session.setAttribute(attrName, value);
}
}
/**
* 删除SESSION中的属性
* @Title: removeSessionAttr
* @author: jack_qiu
* @Description: TODO
* @param attrName
*/
public static void removeSessionAttr(String attrName){
HttpSession session = getSession();
if(null!=session){
session.removeAttribute(attrName);
}
}
/**
* 获取当前请求路径
* @Title: getRequestUrl
* @author: jack_qiu
* @Description: TODO
* @return
*/
public static String getRequestUrl(boolean withQueryString){
ServletRequestAttributes attrs = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
if(null!=attrs){
HttpServletRequest request = attrs.getRequest();
String url = request.getScheme() +"://" + request.getServerName() + ":" +request.getServerPort() +request.getContextPath() + request.getServletPath();
if(443 == request.getServerPort()){
url = "https://" + request.getServerName() + request.getContextPath() + request.getServletPath();
}
if(withQueryString && StringUtils.isNotBlank(request.getQueryString())){
url = url + "?" + request.getQueryString();
}
return url;
}
return null;
}
/**
* 获取原始请求uri地址(未经过nginx代理前的,需要在nginx中设置 proxy_set_header X-Original-URI $uri; 带下来
* @Title: getOriginalRequestUrl
* @author: jack_qiu
* @Description: TODO
* @param withQueryString
* @return
*/
public static String getOriginalRequestUrl(boolean withQueryString){
ServletRequestAttributes attrs = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
if(null!=attrs){
HttpServletRequest request = attrs.getRequest();
String uri = request.getHeader("X-Original-URI");
String host = request.getHeader("X-Original-Host");
if(StrUtil.isBlank(uri) || StrUtil.isBlank(host)){
return getRequestUrl(withQueryString);
}
String url = request.getScheme() +"://" + host + uri;
if(443 == request.getServerPort()){
url = "https://" + host + uri;
}
if(withQueryString && StringUtils.isNotBlank(request.getQueryString())){
url = url + "?" + request.getQueryString();
}
return url;
}
return null;
}
/**
* 获取请求的ip地址
* @Title: getIpAdrress
* @author: jack_qiu
* @Description: TODO
* @param request
* @return
*/
public static String getIpAdrress(HttpServletRequest request) {
String Xip = request.getHeader("X-Real-IP");
String XFor = request.getHeader("X-Forwarded-For");
if(StringUtils.isNotEmpty(XFor) && !"unKnown".equalsIgnoreCase(XFor)){
//多次反向代理后会有多个ip值,第一个ip才是真实ip
int index = XFor.indexOf(",");
if(index != -1){
return XFor.substring(0,index);
}else{
return XFor;
}
}
XFor = Xip;
if(StringUtils.isNotEmpty(XFor) && !"unKnown".equalsIgnoreCase(XFor)){
return XFor;
}
if (StringUtils.isBlank(XFor) || "unknown".equalsIgnoreCase(XFor)) {
XFor = request.getHeader("Proxy-Client-IP");
}
if (StringUtils.isBlank(XFor) || "unknown".equalsIgnoreCase(XFor)) {
XFor = request.getHeader("WL-Proxy-Client-IP");
}
if (StringUtils.isBlank(XFor) || "unknown".equalsIgnoreCase(XFor)) {
XFor = request.getHeader("HTTP_CLIENT_IP");
}
if (StringUtils.isBlank(XFor) || "unknown".equalsIgnoreCase(XFor)) {
XFor = request.getHeader("HTTP_X_FORWARDED_FOR");
}
if (StringUtils.isBlank(XFor) || "unknown".equalsIgnoreCase(XFor)) {
XFor = request.getRemoteAddr();
}
return XFor;
}
/**
* 获取当前请求的IP地址
* @Title: getIpAddress
* @author: jack_qiu
* @Description: TODO
* @return
*/
public static String getIpAddress(){
HttpServletRequest request = getRequest();
if(null!=request){
return getIpAdrress(request);
}
return null;
}
/**
* 判断当前请求是否由微信浏览器发起
* @Title: isWeixinRequest
* @author: jack_qiu
* @Description: TODO
* @return
*/
public static boolean isWeixinRequest(){
/** 拦截微信请求,避免生成无效的流水号 */
HttpServletRequest request = getRequest();
if(null==request){
return false;
}
String userAgent = request.getHeader("User-Agent");
if(StringUtils.isBlank(userAgent)){
userAgent = request.getHeader("user-agent");
}
userAgent = StringUtils.lowerCase(userAgent);
return StringUtils.contains(userAgent, "micromessenger");
}
/**
* 获取指定的SpringBean
* @Title: getSpringBean
* @author: jack_qiu
* @Description: TODO
* @param beanId
* @return
*/
public static Object getSpringBean(String beanId){
HttpServletRequest request = getRequest();
WebApplicationContext webApplicationContext = null;
if(null==request){
webApplicationContext = ContextLoader.getCurrentWebApplicationContext();
}else{
webApplicationContext = WebApplicationContextUtils.getWebApplicationContext(request.getServletContext());
}
if(null==webApplicationContext){
return null;
}
Object bean = null;
try {
bean = webApplicationContext.getBean(beanId);
} catch (NoSuchBeanDefinitionException e) {
}
return bean;
}
}