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

98 阅读1分钟

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

【3.7】UserAdapter
package com.itheima.shiro.core.adapter;  
  
import com.itheima.shiro.pojo.Resource;  
import com.itheima.shiro.pojo.Role;  
import com.itheima.shiro.pojo.User;  
  
import java.util.List;  
  
  
/**  
 * @Description 后台登陆用户适配器接口  
 */  
  
public interface UserAdapter {  
      
    /**  
     * @Description 按用户名查找用户  
     * @param loginName 登录名  
     * @return  
     */  
    User findUserByLoginName(String loginName);  
  
    /**  
     * @Description 查找用户所有角色  
     * @param userId 用户Id  
     * @return  
     */  
    List<Role> findRoleByUserId(String userId);  
  
    /**  
     * @Description 查询用户有那些资源  
     * @param userId 用户Id  
     * @return  
     */  
    List<Resource> findResourceByUserId(String userId);  
  
}  
  
【3.8】UserAdapterImpl
package com.itheima.shiro.core.adapter.impl;  
  
import com.itheima.shiro.constant.SuperConstant;  
import com.itheima.shiro.core.adapter.UserAdapter;  
import com.itheima.shiro.mapper.UserMapper;  
import com.itheima.shiro.mappercustom.UserAdapterMapper;  
import com.itheima.shiro.pojo.Resource;  
import com.itheima.shiro.pojo.Role;  
import com.itheima.shiro.pojo.User;  
import com.itheima.shiro.pojo.UserExample;  
import org.springframework.beans.factory.annotation.Autowired;  
import org.springframework.stereotype.Component;  
  
import java.util.HashMap;  
import java.util.List;  
import java.util.Map;  
import java.util.concurrent.TimeUnit;  
  
  
/**  
 * @Description 后台登陆用户适配器接口实现  
 */  
@Component("userAdapter")  
public class UserAdapterImpl implements UserAdapter {  
  
    @Autowired  
    private UserMapper userMapper;  
  
    @Autowired  
    private UserAdapterMapper userAdapterMapper;  
  
    @Override  
    public User findUserByLoginName(String loginName) {  
        UserExample userExample = new UserExample();  
        userExample.createCriteria().andEnableFlagEqualTo(SuperConstant.YES).andLoginNameEqualTo(loginName);  
        List<User> userList = userMapper.selectByExample(userExample);  
        if (userList.size()==1) {  
            return userList.get(0);  
        }else {  
            return null;  
        }  
    }  
  
    @Override  
    public List<Role> findRoleByUserId(String userId) {  
        Map<String, Object> values = new HashMap<String, Object>();  
        values.put("userId", userId);  
        values.put("enableFlag", SuperConstant.YES);  
        List<Role> list = userAdapterMapper.findRoleByUserId(values);  
        return list;  
    }  
  
    @Override  
    public List<Resource> findResourceByUserId(String userId) {  
        Map<String, Object> values = new HashMap<String, Object>();  
        values.put("userId", userId);  
        values.put("enableFlag", SuperConstant.YES);  
        List<Resource> list=userAdapterMapper.findResourceByUserId(values);  
        return list;  
    }  
}  
  

5、ShiroConfig配置

【1】简介

【2】原理分析

(1)、创建SimpleCookie,访问项目时,会在客户端中cookie中存放ShiroSession的对

(2)、创建DefaultWebSessionManager会话管理器定义cookie机制、定时刷新、全局会话超时时间然后交

于DefaultWebSecurityManager权限管理器管理

(3)、创建自定义ShiroDbRealm实现,用于权限认证、授权、加密方式的管理,同时从数据库中取得相关的

角色、资源、用户的信息,然后交于DefaultWebSecurityManager权限管理器管理

(4)、创建DefaultWebSecurityManager权限管理器用于管理DefaultWebSessionManager会话管理器、ShiroDbRealm

(5)、创建lifecycleBeanPostProcessor和DefaultAdvisorAutoProxyCreator相互配合事项注解的权限鉴权

(6)、创建ShiroFilterFactoryBean的shiro过滤器指定权限管理器、同时启动连接链及登录URL、未登录的URL

的跳转