package com.aggrepoint.winlet.plugin; import java.util.Hashtable; import javax.servlet.http.HttpServletRequest; import org.springframework.expression.Expression; import org.springframework.expression.spel.standard.SpelExpressionParser; import com.aggrepoint.winlet.AccessRuleEngine; import com.aggrepoint.winlet.ContextUtils; import com.aggrepoint.winlet.UserProfile; /** * <pre> * 缺省的访问规则引擎 * 以当前用户身份为root对象执行SpEL规则表达式 * </pre> * * @author Jiangming Yang (yangjm@gmail.com) */ public class DefaultAccessRuleEngine implements AccessRuleEngine { Hashtable<String, Expression> htExpressionCache = new Hashtable<String, Expression>(); protected Expression getExpression(String rule) { Expression exp = null; synchronized (htExpressionCache) { exp = htExpressionCache.get(rule); if (exp == null) { exp = new SpelExpressionParser().parseExpression(rule); htExpressionCache.put(rule, exp); } } return exp; } @Override public boolean eval(String rule) throws Exception { if (rule == null) return true; Expression exp = getExpression(rule); HttpServletRequest req = ContextUtils.getRequest(); UserProfile user = ContextUtils.getUser(req); synchronized (exp) { return exp.getValue(user, Boolean.class); } } }