Hybris中是否存在B2B匿名用户类型为B2BCustomer的场景?
首先给出DefaultUserService.java中getAnonymousUser()的实现代码:
public CustomerModel getAnonymousUser() { return (CustomerModel)this.getSessionService().executeInLocalView(new SessionExecutionBody() { public Object execute() { DefaultUserService.this.searchRestrictionService.disableSearchRestrictions(); return DefaultUserService.this.getUserForUID(UserConstants.ANONYMOUS_CUSTOMER_UID, CustomerModel.class); } }); }
结论
从Hybris开箱即用的实现逻辑来看,该方法默认返回的是CustomerModel类型的匿名用户,但确实存在几种特殊定制场景会返回B2BCustomer类型实例:
- 手动修改了匿名用户的实例类型:如果通过ImpEx、Backoffice/HMC等方式将默认创建的匿名用户的item类型修改为
B2BCustomer,因为getUserForUID方法支持父类查询返回子类实例,传入CustomerModel.class参数时也能正常查询到子类B2BCustomer的实例,代码中的强转也不会报错(B2BCustomer是CustomerModel的子类,属于Java多态的合法场景)。 - 重写了
DefaultUserService的getAnonymousUser()方法:在重度定制的B2B或者B2B/B2C混合站点中,为了让匿名用户也能携带B2B专属属性(比如默认所属单元、成本中心关联逻辑等),很多项目会自定义UserService实现类,覆盖该方法直接查询返回B2BCustomer类型的匿名用户,甚至初始化时就直接创建B2BCustomer类型的匿名用户。 - 自定义扩展了
getUserForUID的查询逻辑:部分项目会修改用户查询的底层逻辑,当查询CustomerModel类型的用户时,优先返回自定义的B2BCustomer子类实例,这种情况下匿名用户查询也会返回B2BCustomer类型。
内容的提问来源于stack exchange,提问作者Farrukh Chishti
相关产品推荐
相关产品推荐

