package com.alifi.hades.biz.access.rule.ctu;
import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.alifi.hades.biz.access.rule.AccessRule;
import com.alifi.hades.biz.crm.manager.CrmMemberManager;
import com.alifi.hades.common.model.CustListDO;
import com.alifi.hades.dal.dao.CustListDao;
import com.alifi.hyperion.common.model.Member;
/**
* 黑名单准入规则
*
*/
public abstract class AbstractCTUAccessRule implements AccessRule {
private static final Log logger = LogFactory.getLog(AbstractCTUAccessRule.class);
protected static final String KEY_MEMBER = "member";
private CrmMemberManager crmMemberManager;
private CustListDao custListDao;
public boolean checkAccess(String prodId, Map<String, Object> context) {
if (context.containsKey(KEY_MEMBER)) {
Member member = (Member) context.get(KEY_MEMBER);
String site = crmMemberManager.getSiteBySource(member.getSource());
String siteMemId = member.getUserId();
String ruleCode = getAccessRuleCode();
// 白名单
CustListDO whiteList = custListDao.getWhiteListByRuleCode(site, siteMemId, ruleCode);
if (whiteList != null) {
logger.info("该规则的白名单用户,跳过此规则校验。ruleCode:" + ruleCode + " siteMemId:" + siteMemId);
return true;
}
return doCheckAccess(prodId, member);
}
return false;
}
protected abstract boolean doCheckAccess(String prodId, Member member);
public void setCustListDao(CustListDao custListDao) {
this.custListDao = custListDao;
}
public void setCrmMemberManager(CrmMemberManager crmMemberManager) {
this.crmMemberManager = crmMemberManager;
}
}
/*
* Project: Hades
*
* File Created at 2011-03-15
* $Id$
*
* Copyright 2011 B2B Technology, Alibaba.com Corporation Limited.
* All rights reserved.
*
* This software is the confidential and proprietary information of
* Alibaba Company. ("Confidential Information"). You shall not
* disclose such Confidential Information and shall use it only in
* accordance with the terms of the license agreement you entered into
* with Alibaba.com.
*/
package com.alifi.hades.biz.access.rule.ctu;
import static com.alifi.hades.biz.common.util.TemplatedLog.log;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.alifi.ctu.service.BlackListService;
import com.alifi.hades.biz.common.dictionary.MsgTemplateDictionary.DataError;
import com.alifi.hades.biz.common.dictionary.MsgTemplateDictionary.RpcCallError;
import com.alifi.hades.biz.common.exception.LoanLogMsg;
import com.alifi.hades.biz.crm.manager.CrmMemberManager;
import com.alifi.hyperion.common.model.Member;
/**
* 黑名单不准入
*
*/
public class BlackListAccessRule extends AbstractCTUAccessRule {
private static final Log logger = LogFactory.getLog(BlackListAccessRule.class);
private CrmMemberManager crmMemberManager;
private BlackListService blackListService;
@Override
/**
* 黑名单不准入
*/
protected boolean doCheckAccess(String prodId, Member member) {
String site = crmMemberManager.getSiteBySource(member.getSource());
String siteMemId = member.getUserId();
try {
if(blackListService.checkBlackListBySiteMemeber(site, siteMemId, prodId, "1")){
logger.debug(log(DataError.UNEXPECTED, "黑名单用户不准入。siteMemId:" + siteMemId));
return false;
}else{
return true;
}
} catch (Exception e) {
logger.error(log(RpcCallError.MSG_00001, LoanLogMsg.BLACKLIST_EXCEPTION), e);
return false;
}
}
public String getAccessRuleCode() {
return "2000";
}
public void setCrmMemberManager(CrmMemberManager crmMemberManager) {
this.crmMemberManager = crmMemberManager;
super.setCrmMemberManager(crmMemberManager);//处理父类无法注入问题
}
public void setBlackListService(BlackListService blackListService) {
this.blackListService = blackListService;
}
}
分享到:
相关推荐
Spring 容器中存在多个同一接口或父类的实现时,如果不明确指定要注入哪个实现,Spring 就会抛出 "Consider marking one of the beans as @Primary, updating the consumer to accept multiple beans, or using @...
Spring框架中,使用@Autowired注解可以将依赖项注入到Bean中,但是当我们需要将依赖项注入到抽象父类时,会遇到一些问题。如果我们直接使用@Autowired注解在抽象父类中,可能不会生效,因为抽象父类不能被实例化。...
为了更好地与现代Java框架集成,如Spring,Bean Validation提供了与上下文和依赖注入机制的深度集成。 #### 2.5 组别转换 组别转换机制允许在不同场景下动态切换验证规则,增强了验证的灵活性。 #### 2.6 消息...
@Autowired是Spring提供的注解,它可以实现自动装配,开发者可以通过此注解自动注入Bean的依赖。Autowired注解可以用在成员变量、setter方法以及构造函数上。当Spring容器启动时,它会自动查找并注入匹配的Bean。 @...
例如,当需要注入父类中定义的属性,但无法重写父类的属性或setter方法时,可以使用@PostConstruct注解的方法来完成初始化。 总结来说,Spring 3.0的注解注入提供了强大的依赖注入能力,简化了XML配置,提高了代码...
- 示例中,如果一个子类需要注入父类中的属性,而不能覆盖父类的setter方法,可以使用`@PostConstruct`来注入`SessionFactory`。 总的来说,这些注解在Spring框架中起着至关重要的作用,它们允许开发者更灵活地...
在Spring中,我们可以定义Bean的继承关系,使得子类Bean可以继承父类Bean的配置属性。这在处理具有相似属性或行为的Bean时非常有用。例如,你可以定义一个基础的DAO Bean配置,然后让具体的DAO Bean继承它,从而...
在EJB3.0中,依赖注入主要通过容器来实现,使得bean不再需要手动查找和管理依赖。 依赖注入的基本概念是,当一个对象(调用者)需要另一个对象(被调用者)协助时,不再由调用者直接创建被调用者的实例,而是由外部...
这样可以在任何地方通过这个工具类获取bean,而不需要依赖特定的父类或实现。 ```java public class SpringContextUtil { private static ApplicationContext context; static { context = new ...
在Spring框架中,Bean之间的关系不仅限于简单的依赖注入(DI)。本文将深入探讨Spring Bean之间的特殊关系,包括继承、前置依赖以及引用。 1. **继承** 在面向对象编程中,继承允许子类共享父类的属性和方法,以...
5. **更多的bean定义元数据支持**,例如,它可以处理更复杂的bean定义,如bean的父类、自动代理等。 四、BeanFactory的实现 Spring框架提供了多种BeanFactory实现,如XmlBeanFactory、DefaultListableBeanFactory等...
当使用@Resource或@Autowired注解注入Spring管理的Bean时,需要注意注入变量的类型必须与要注入的Bean类型或其父类类型匹配。否则,Spring将无法完成注入过程,因为类型不一致会导致注入失败。 总结来说,Spring...
9. Bean的父类定义(Parent Bean Definition):允许继承另一个BeanDefinition的属性。 二、BeanDefinition的注册与加载 在Spring容器启动时,会通过BeanDefinitionReader读取XML配置文件或通过...
`DefaultListableBeanFactory` 是 Spring 容器的核心,它负责管理 Bean 的生命周期,包括 Bean 的创建、初始化、依赖注入以及销毁等过程。 3. 配置文件加载 `XmlBeanFactory` 在初始化过程中,会使用 `...
Bean可以通过设置`abstract="true"`变为抽象Bean,它不能直接实例化,但可以作为其他Bean的父类。 8. **依赖实验**: 一个Bean可能依赖于其他Bean,Spring会自动处理这些依赖关系,确保在需要时能正确注入。 9. ...
当我们创建一个`abstract="true"`的bean定义时,Spring容器不会尝试创建该bean,而是将其作为其他bean的父类,让子bean继承其属性和配置。这在我们需要定义一组有共同配置的bean时非常有用,而具体实现则由子bean...
1. **构造器注入的循环依赖**:Spring无法解决,因为构造器参数必须在实例化时就提供,如果此时依赖的对象还未创建,就会导致无法实例化。 2. **属性注入(setter方法)的循环依赖**:Spring可以在Bean实例化后,但...
通过设置父类bean为抽象类型(abstract="true"),并在子bean中引用父bean,可以轻松实现配置的重用和简化。 **6. 通过ApplicationContext装配bean** 使用ApplicationContext装配bean而不是在XML配置中直接预装配...
基于父类:代理对象与目标对象是父子关系.目标不能被final修饰 修改默认代理方法: 增强种类 前置通知 后置通知 异常通知 最终通知 环绕通知 注意:使用注解的方式,最终通知和后置通知顺序换了,建议...
Spring中的Bean注入与配置 在Spring框架中,Bean的注入是其核心特性之一。例如,在`LoginAction`类中,开发者需正确声明和注入`UserDAO`接口的实现类。这通常通过在类内部声明私有成员变量,并提供相应的get/set...