
org.frameworkset.security.session.impl.SessionHelper Maven / Gradle / Ivy
Show all versions of bboss-security Show documentation
/*
* 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;
}
}