Java安全框架——Apache Shiro(三十二)

111 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第24天,点击查看活动详情

【1.3】springboot-shiro-producer

​        认证与鉴权服务化的生成者

【1.4】springboot-shiro-mgt

​        认证与鉴权服务化消费者

【1.5】springboot-shiro-dubbo-app-handler

​        生产业务服务化生产者

3、认证鉴权服务化

我们可以看到,这里服务化的为UserAdapterFace

模块springboot-shiro-face中的接口定义UserAdapterFace

package com.itheima.shiro.face;  
  
import com.itheima.shiro.vo.ResourceVo;  
import com.itheima.shiro.vo.RoleVo;  
import com.itheima.shiro.vo.UserVo;  
  
import java.util.List;  
  
/**  
 * @Description:用户服务接口定义  
 */  
public interface UserAdapterFace {  
  
    /**  
     * @Description 按用户名查找用户  
     * @param loginName 登录名  
     * @return  
     */  
    UserVo findUserByLoginName(String loginName);  
  
    /**  
     * @Description 查找用户所有角色  
     * @param userId 用户Id  
     * @return  
     */  
    List<RoleVo> findRoleByUserId(String userId);  
  
    /**  
     * @Description 查询用户有那些资源  
     * @param userId 用户Id  
     * @return  
     */  
    List<ResourceVo> findResourceByUserId(String userId);  
  
}  
  

springboot-shiro-producer模块中的生产者UserAdapterFaceImpl

package com.itheima.shiro.faceImpl;  
  
import com.itheima.shiro.adapter.UserAdapter;  
import com.itheima.shiro.face.UserAdapterFace;  
import com.itheima.shiro.pojo.Resource;  
import com.itheima.shiro.pojo.Role;  
import com.itheima.shiro.pojo.User;  
import com.itheima.shiro.utils.BeanConv;  
import com.itheima.shiro.utils.EmptyUtil;  
import com.itheima.shiro.vo.ResourceVo;  
import com.itheima.shiro.vo.RoleVo;  
import com.itheima.shiro.vo.UserVo;  
import org.apache.dubbo.config.annotation.Service;  
import org.springframework.beans.factory.annotation.Autowired;  
  
import java.util.List;  
  
/**  
 * @Description:  
 */  
@Service(version = "1.0.0", retries = 3,timeout = 5000)  
public class UserAdapterFaceImpl implements UserAdapterFace {  
  
    @Autowired  
    UserAdapter userAdapter;  
  
  
    @Override  
    public UserVo findUserByLoginName(String loginName) {  
        User user = userAdapter.findUserByLoginName(loginName);  
        if (!EmptyUtil.isNullOrEmpty(user)){  
            return BeanConv.toBean(user,UserVo.class);  
        }  
        return null;  
    }  
  
    @Override  
    public List<RoleVo> findRoleByUserId(String userId) {  
        List<Role> list = userAdapter.findRoleByUserId(userId);  
        if (!EmptyUtil.isNullOrEmpty(list)){  
            return BeanConv.toBeanList(list, RoleVo.class);  
        }  
        return null;  
    }  
  
    @Override  
    public List<ResourceVo> findResourceByUserId(String userId) {  
        List<Resource> list = userAdapter.findResourceByUserId(userId);  
        if (!EmptyUtil.isNullOrEmpty(list)){  
            return BeanConv.toBeanList(list, ResourceVo.class);  
        }  
        return null;  
    }  
}  
  

springboot-shiro-handler模块下的消费者UserBridgeServiceImpl

package com.itheima.shiro.client;

import com.itheima.shiro.constant.CacheConstant;
import com.itheima.shiro.core.SimpleCacheManager;
import com.itheima.shiro.core.base.ShiroUser;
import com.itheima.shiro.core.base.SimpleMapCache;
import com.itheima.shiro.core.base.SimpleToken;
import com.itheima.shiro.core.bridge.UserBridgeService;
import com.itheima.shiro.face.UserAdapterFace;
import com.itheima.shiro.utils.BeanConv;
import com.itheima.shiro.utils.EmptyUtil;
import com.itheima.shiro.utils.ShiroUserUtil;
import com.itheima.shiro.vo.ResourceVo;
import com.itheima.shiro.vo.RoleVo;
import com.itheima.shiro.vo.UserVo;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.Reference;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.SimpleAuthenticationInfo;
import org.apache.shiro.authc.UnknownAccountException;
import org.apache.shiro.authz.SimpleAuthorizationInfo;
import org.apache.shiro.util.ByteSource;
import org.redisson.api.RBucket;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;