All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.frameworkset.security.session.impl.SessionHelper Maven / Gradle / Ivy

Go to download

support session share between application cluster nodes and cross domain application nodes.support good application session monitor and session data statitic module.demo site http://session.bbossgroups.com/

There is a newer version: 6.2.8
Show newest version
/*
 *  Copyright 2008 bbossgroups
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */
package org.frameworkset.security.session.impl;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.regex.Pattern;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.frameworkset.security.session.InvalidateCallback;
import org.frameworkset.security.session.Session;
import org.frameworkset.security.session.SessionBasicInfo;
import org.frameworkset.security.session.domain.CrossDomain;
import org.frameworkset.security.session.statics.AttributeInfo;
import org.frameworkset.security.session.statics.NullSessionStaticManagerImpl;
import org.frameworkset.security.session.statics.SessionConfig;
import org.frameworkset.security.session.statics.SessionStaticManager;
import org.frameworkset.soa.ObjectSerializable;
import org.frameworkset.spi.BaseApplicationContext;
import org.frameworkset.spi.DefaultApplicationContext;

import com.frameworkset.util.SimpleStringUtil;
import com.frameworkset.util.StringUtil;
import com.mongodb.BasicDBList;
import com.mongodb.BasicDBObject;
import com.mongodb.DBObject;

/**
 * 

Title: SessionHelper.java

*

Description:

*

bboss workgroup

*

Copyright (c) 2008

* @Date 2014年4月30日 * @author biaoping.yin * @version 3.8.0 */ public class SessionHelper { private static SessionManager sessionManager; private static SessionStaticManager sessionStaticManager; private static boolean inited = false; public static SessionConfig getSessionConfig(String appcode) { return sessionManager.getSessionConfig(appcode,true); } public static SessionConfig getSessionConfig(String appcode,boolean serialattributes) { return sessionManager.getSessionConfig(appcode, serialattributes); } public static boolean filter(String key) { return key.equals("maxInactiveInterval") || key.equals("creationTime") || key.equals("lastAccessedTime") || key.equals("referip") || key.equals("_validate") || key.equals("sessionid") || key.equals("_id") || key.equals("appKey") || key.equals("host") || key.equals("secure") || key.equals("httpOnly") || key.equals("requesturi") || key.equals("lastAccessedUrl") || key.equals("lastAccessedHostIP"); } public static void init(String contextpath){ if(inited) return ; synchronized(SessionHelper.class) { if(inited) return ; try { BaseApplicationContext context = DefaultApplicationContext.getApplicationContext("sessionconf.xml"); SessionManager sessionManager = context.getTBeanObject("sessionManager", SessionManager.class); SessionStaticManager sessionStaticManager = null; String monitorScope = null; if(!sessionManager.usewebsession()) { sessionStaticManager = context.getTBeanObject("sessionStaticManager", SessionStaticManager.class); monitorScope = sessionStaticManager.getMonitorScope(); } else sessionStaticManager = new NullSessionStaticManagerImpl(); if(monitorScope == null) monitorScope = SessionStaticManager.MONITOR_SCOPE_SELF; sessionManager.initSessionConfig(contextpath,monitorScope); SessionHelper.sessionManager = sessionManager; SessionHelper.sessionStaticManager = sessionStaticManager; } finally { inited = true; } } } public static Object convertValue(String value,AttributeInfo attributeInfo) { if(attributeInfo.getType().equals("String")) return value; else if(attributeInfo.getType().equals("int")) return Integer.parseInt(value); else if(attributeInfo.getType().equals("long")) return Long.parseLong(value); else if(attributeInfo.getType().equals("double")) return Double.parseDouble(value); else if(attributeInfo.getType().equals("float")) return Float.parseFloat(value); else if(attributeInfo.getType().equals("boolean")) return Boolean.parseBoolean(value); return value; } public static Map parserExtendAttributes(HttpServletRequest request,SessionConfig sessionConfig ) { AttributeInfo[] monitorAttributeArray = sessionConfig.getExtendAttributeInfos(); if(monitorAttributeArray == null || monitorAttributeArray.length == 0) { return null; } Map datas = new HashMap(); for(AttributeInfo attributeInfo : monitorAttributeArray) { String value = request.getParameter(attributeInfo.getName()); if(value != null ) { if(value.trim().equals("") ) { if(attributeInfo.isEnableEmptyValue()) { String enableEmptyValue = request.getParameter(attributeInfo.getName()+"_enableEmptyValue"); if(enableEmptyValue != null) { try { attributeInfo = attributeInfo.clone(); attributeInfo.setValue(""); datas.put(attributeInfo.getName(), attributeInfo); } catch (CloneNotSupportedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } else { try { attributeInfo = attributeInfo.clone(); attributeInfo.setValue(SessionHelper. convertValue( value, attributeInfo)); datas.put(attributeInfo.getName(), attributeInfo); } catch (CloneNotSupportedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } return datas; } public static void evalqueryfields(AttributeInfo[] monitorAttributeArray, Map keys) { if(monitorAttributeArray != null && monitorAttributeArray.length > 0) { for(AttributeInfo attr:monitorAttributeArray) { keys.put(attr.getName(), 1); } } } public static void buildExtendFieldQueryCondition(Map monitorAttributeArray, BasicDBObject query) { if(monitorAttributeArray != null && monitorAttributeArray.size() > 0) { for(Entry Entry:monitorAttributeArray.entrySet()) { AttributeInfo attr = Entry.getValue(); if(attr.getType().equals("String")) { if(!attr.isLike()) { if (!StringUtil.isEmpty((String)attr.getValue())) { Object value = serial(attr.getValue()); query.append(attr.getName(), value); } else if(attr.isEnableEmptyValue()) { BasicDBList values = new BasicDBList(); values.add(new BasicDBObject(attr.getName(), serial(""))); values.add(new BasicDBObject(attr.getName(), null)); query.append("$or", values); } } else { if (!StringUtil.isEmpty((String)attr.getValue())) { Object value = attr.getValue(); Pattern hosts = Pattern.compile("^

<\\!\\[CDATA\\[" + value + ".*$", Pattern.CASE_INSENSITIVE); query.append(attr.getName(), new BasicDBObject("$regex",hosts)); } else if(attr.isEnableEmptyValue()) { //values.add(null); BasicDBList values = new BasicDBList(); values.add(new BasicDBObject(attr.getName(), serial(""))); values.add(new BasicDBObject(attr.getName(), null)); query.append("$or", values); } } } else { Object value = serial(attr.getValue()); query.append(attr.getName(), value); } } } } public static List evalqueryfiledsValue(AttributeInfo[] monitorAttributeArray, DBObject dbobject) { List extendAttrs = null; if(monitorAttributeArray != null && monitorAttributeArray.length > 0) { extendAttrs = new ArrayList(); AttributeInfo attrvalue = null; for(AttributeInfo attributeInfo:monitorAttributeArray) { try { attrvalue = attributeInfo.clone(); String value = (String)dbobject.get(attrvalue.getName()); attrvalue.setValue(unserial( value)); extendAttrs.add(attrvalue); } catch (CloneNotSupportedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } return extendAttrs; } public static void destroy() { sessionManager = null; } public static SessionManager getSessionManager() { return sessionManager; } public static SessionStaticManager getSessionStaticManager() { return sessionStaticManager; } public static HttpSession createSession(ServletContext servletContext,SessionBasicInfo sessionBasicInfo,String contextpath,InvalidateCallback invalidateCallback) { HttpSession session = sessionManager.getSessionStore().createHttpSession( servletContext, sessionBasicInfo, contextpath, invalidateCallback); return session; } public static void dispatchEvent(SessionEventImpl sessionEvent) { sessionManager.dispatchEvent(sessionEvent); } public static boolean haveSessionListener() { return sessionManager.haveSessionListener(); } public static Session getSession(String appkey,String contextPath, String sessionid) { // TODO Auto-generated method stub return sessionManager.getSessionStore().getSession(appkey,contextPath, sessionid); } public static Object serial(Object value) { if(value != null) { try { value = ObjectSerializable.toXML(value); // value = new String(((String)value).getBytes(Charset.defaultCharset()),"UTF-8"); } catch (Exception e) { throw new RuntimeException(e); } } return value; } public static Object unserial(String value) { if(value == null) return null; return ObjectSerializable.toBean(value, Object.class); } public static String wraperAttributeName(String appkey,String contextpath, String attribute) { CrossDomain crossDomain = sessionManager.getCrossDomain(); if(crossDomain == null) return attribute; return crossDomain.wraperAttributeName(appkey, contextpath, attribute); } public static String dewraperAttributeName(String appkey,String contextpath, String attribute) { CrossDomain crossDomain = sessionManager.getCrossDomain(); if(crossDomain == null) return attribute; return crossDomain.dewraperAttributeName(appkey, contextpath, attribute); } public static String getAppKey(HttpServletRequest request) { String appcode = getSessionManager().getAppcode(); if(appcode != null) { return appcode; } return getAppKeyFromRequest(request); } public static String getAppKeyFromRequest(HttpServletRequest request) { // String appcode = getSessionManager().getAppcode(); // if(appcode != null) // { // return appcode; // } if(request != null) { String appKey = request.getContextPath().replace("/", ""); if(appKey.equals("")) appKey = "ROOT"; return appKey; } return null; } public static String getAppKeyFromServletContext(ServletContext context) { // String appcode = getSessionManager().getAppcode(); // if(appcode != null) // { // return appcode; // } if(context != null) { String appKey = context.getContextPath().replace("/", ""); if(appKey.equals("")) appKey = "ROOT"; return appKey; } return null; } public static boolean hasMonitorPermission(String app, HttpServletRequest request) { return getSessionStaticManager().hasMonitorPermission(app, request); } public static boolean hasDeleteAppPermission(String app, HttpServletRequest request) { return getSessionStaticManager().hasMonitorPermission(app, request); } public static boolean deleteApp(String app) throws Exception { return getSessionStaticManager().deleteApp(app); } public static boolean isMonitorAll() throws Exception { return getSessionStaticManager().isMonitorAll(); } /** * * @param monitorAttributes * @return */ public static AttributeInfo[] getExtendAttributeInfos(String monitorAttributes) { if(StringUtil.isEmpty(monitorAttributes)) return null; AttributeInfo[] monitorAttributeArray = SimpleStringUtil.json2Object(monitorAttributes,AttributeInfo[].class); // AttributeInfo[] monitorAttributeArray = null; // if(!StringUtil.isEmpty(monitorAttributes)) // { // String[] monitorAttributeArray_ = monitorAttributes.split(","); // monitorAttributeArray = new AttributeInfo[monitorAttributeArray_.length]; // AttributeInfo attributeInfo = null; // for(int i = 0; i < monitorAttributeArray_.length; i ++) // { // String attr = monitorAttributeArray_[i]; // attributeInfo = new AttributeInfo(); // String attrinfo[] = attr.split(":"); // if(attrinfo.length > 2) // { // attributeInfo.setName(attrinfo[0]); // attributeInfo.setType(attrinfo[1]); // attributeInfo.setCname(attrinfo[2]); // } // else if(attrinfo.length > 1) // { // attributeInfo.setName(attrinfo[0]); // attributeInfo.setType(attrinfo[1]); // } // else // { // attributeInfo.setName(attrinfo[0]); // attributeInfo.setType("String"); // } // monitorAttributeArray[i]=attributeInfo; // // // } // // } return monitorAttributeArray; } public static List evalqueryfiledsValue(AttributeInfo[] attributeInfos, List data, int offset) { List extendAttrs = null; if(attributeInfos != null && attributeInfos.length > 0) { extendAttrs = new ArrayList(); AttributeInfo attrvalue = null; for(int j = 0; j < attributeInfos.length; j ++ ) { AttributeInfo attributeInfo = attributeInfos[j]; try { attrvalue = attributeInfo.clone(); String value = data.get(j +offset); attrvalue.setValue(unserial( value)); extendAttrs.add(attrvalue); } catch (CloneNotSupportedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } return extendAttrs; } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy