### 1. 简介 > 绝大部分的系统,都需要登录,Java servlet内置的session缓存在jvm中的,对于“无状态”的集群服务来说,就不适用,所以dobbinfw默认使用redis实现来保存用户会话(session) ### 2. 接口 ```java package com.dobbinsoft.fw.core.util; public interface ISessionUtil { public void setUser(U userDTO); public U getUser(); public void setAdmin(A adminDTO); public A getAdmin(); public Class getUserClass(); public Class getAdminClass(); public boolean hasPerm(String permission) throws ServiceException; } ``` | 类型 | 名 | 解释 | | ---- | --------------- | ------------------------------------------------------------ | | 接口 | IdentityOwner | 表示拥有ID的一个实例, U extends IdentityOwner, 此处U表示用户的类 | | 接口 | PermissionOwner | 表示拥有权限的一个实例, A extends PermissionOwner,此处A表示管理员类 | | 方法 | getUserClass | 获取用户类的 class 对象,方便反序列化 | | 方法 | hasPerm | 判断当前会话中,管理员是否拥有某个权限点 | 接口中的方法均可在业务系统中使用,通常我们业务系统只用,getUser,getAdmin获取当前登录的用户、管理员 ### 3. 默认实现 core包中默认提供redis实现,实现类为 com.dobbinsoft.fw.core.util.SessionUtil 若无特殊需求,直接使用即可。 ### 4. 使用方法 #### 4.1. 继承BaseService(推荐) ```java public class VipOrderServiceImpl extends BaseService implements VipOrderService { public Object prepay(Long templateId, String ip, Long userId) throws ServiceException { ... orderRequest.setOpenid(sessionUtil.getUser().getWxMpOpenId()); ... } } ``` #### 4.2. 手工注入ISessionUtil ```java @Autowired private ISessionUtil sessionUtil; ``` ### 5. 写自己的实现类 > 例如,您用的是memcached等常见,需要自己去实现会话保存方式,您可以自我实现ISessionUtil接口。并提高装配优先级即可。 ```java @Component @Primary public class MySessionUtil implements ISessionUtil { .... impl } ```