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

org.esfinge.guardian.abac.el.ELUtils Maven / Gradle / Ivy

The newest version!
package org.esfinge.guardian.abac.el;

import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;

import javax.el.ArrayELResolver;
import javax.el.BeanELResolver;
import javax.el.FunctionMapper;
import javax.el.ListELResolver;
import javax.el.MapELResolver;
import javax.el.ValueExpression;
import javax.el.VariableMapper;

import org.apache.el.ExpressionFactoryImpl;
import org.apache.el.ValueExpressionLiteral;
import org.apache.el.lang.EvaluationContext;
import org.apache.el.lang.FunctionMapperImpl;
import org.apache.el.lang.VariableMapperImpl;
import org.esfinge.guardian.context.AuthorizationContext;
import org.esfinge.guardian.utils.GuardianConfig;

public class ELUtils {

	public static final String EL_PATTERN = "\\#\\{.*\\}";

	static public FunctionMapper buildFunctionMapper(Map functionMethodMap) {
		FunctionMapperImpl mapper = new FunctionMapperImpl();

		for (String functionName : functionMethodMap.keySet()) {
			mapper.addFunction("", functionName, functionMethodMap.get(functionName));
		}

		return mapper;
	}

	static public VariableMapper buildVariableMapper(Map attributeMap) {
		VariableMapperImpl mapper = new VariableMapperImpl();

		for (String attributeName : attributeMap.keySet()) {
			Class clazz = Object.class;

			if (attributeMap.get(attributeName) != null) {
				clazz = attributeMap.get(attributeName).getClass();
			}

			ValueExpressionLiteral expression = new ValueExpressionLiteral(attributeMap.get(attributeName), clazz);

			mapper.setVariable(attributeName, expression);
		}
		return mapper;
	}

	static public EvaluationContext buildEvaluationContext(AuthorizationContext context) {
		Map attributeMap = buildVariableMap(context);
		Map functionMethodMap = getFunctionMap(context.getGuardedMethod());

		VariableMapper vMapper = buildVariableMapper(attributeMap);
		FunctionMapper fMapper = buildFunctionMapper(functionMethodMap);

		GuardianELContext elContext = new GuardianELContext(fMapper, vMapper, new ArrayELResolver(),
				new ListELResolver(), new MapELResolver(), new BeanELResolver());

		return new EvaluationContext(elContext, fMapper, vMapper);
	}

	static public Object evaluateExpression(EvaluationContext elContext, String expression) {

		ValueExpression result = new ExpressionFactoryImpl().createValueExpression(elContext, expression, Object.class);

		return result.getValue(elContext);
	}

	static public Map buildVariableMap(AuthorizationContext context) {
		Map variableMap = new HashMap();
		GuardianConfig guardianConfig = new GuardianConfig();

		String subjectKey = guardianConfig.getSubjectKey();
		variableMap.put(subjectKey, context.getSubject().getProps());

		String resourceKey = guardianConfig.getResourceKey();
		variableMap.put(resourceKey, context.getResource().getProps());

		String environmentKey = guardianConfig.getEnvironmentKey();
		variableMap.put(environmentKey, context.getEnvironment().getProps());

		return variableMap;
	}

	static public Map getFunctionMap(Method method) {
		Map map = new HashMap();
		map.put(method.getName(), method);
		return map;
	}

	static public void main(String[] args) throws Exception {
		EvaluationContext ctd = new EvaluationContext(null, null, null);
		System.out.println(ctd);

//		 VariableMapperImpl mapper = new VariableMapperImpl();
//		 System.out.println(mapper);
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy