shiro框架权限模块细节

本文详细探讨了Shiro框架的session处理、授权管理和菜单管理。在session处理中,重点讲述了登录成功后如何将主体设置为用户以及UserContext的使用。授权管理部分,通过FilterChainDefinitionMapFactory和PermissionRepository实现了动态获取权限。对于Ajax请求的权限处理,自定义了权限过滤器以适应返回JSON数据的需求。最后,介绍了菜单管理的实现,包括菜单的关联配置、Repository和服务,以及如何根据权限显示或隐藏菜单项。
摘要由CSDN通过智能技术生成

一.session处理

1.1 登录成功后主体为用户

以前登录成功,传的是username,现在传Employee对象

//身份认证
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
   ...
    SimpleAuthenticationInfo authenticationInfo = new SimpleAuthenticationInfo(loginUser,password,salt,getName());
    return authenticationInfo;
}

1.2 UserContext

session是从subject获取

存在shiro的session中后,HttpSession也会有值

public class UserContext {

    public static final String USER_IN_SESSION ="loginUser";

    //把登录成功的用户放到session中
    public static void setUser(Employee loginUser){
        Subject subject = SecurityUtils.getSubject();
        //代表登录成功,把当前登录用户放到Session中去(shiro的session)
        //1.拿到session
        Session session = subject.getSession();
        //2.把当前登录成功的用户放到session中去
        session.setAttribute(USER_IN_SESSION, loginUser);

    }
    
    //获取到当前登录用户
    public static Employee getUser(){
        Subject subject = SecurityUtils.getSubject();
        Session session = subject.getSession();
        Employee employee = (Employee) session.getAttribute(USER_IN_SESSION);
        return employee;
    }

}

二.授权管理

2.1 FilterChainDefinitionMapFactory

保存所有权限过滤的数据都是从数据库中获取

@Autowired
private IPermissionService permissionService;
public Map<String,String> createFilterChainDefinitionMap(){
    ...
    //拿到所有权限
    List<Permission> perms = permissionService.findAll();
    //设置相应的权限
    perms.forEach(p -> 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值