智能商贸系统07-Shiro权限与菜单

本文详细介绍了智能商贸系统中Shiro权限的实现,包括自定义拦截器、权限查询、Ajax请求权限拦截、Shiro标签权限判断以及菜单管理(层级结构和权限结构)。通过FilterChainDefinitionMapFactory、PermissionRepository、AisellRealm等进行权限管理,并通过ajax请求处理权限跳转。同时,文章还探讨了如何利用Shiro标签进行权限判断以及菜单对象的CRUD操作,确保菜单展示与用户权限相符。
摘要由CSDN通过智能技术生成

1、权限管理

之前写的权限是写死的,没有根据用户实际生效,如下图:现在做一个真实的权限,主要思路是:
从主体中获取到登录的用户,然后通过自定义jpql,拿到权限
在这里插入图片描述

1.1、FilterChainDefinitionMapFactory,自定义拦截器
public class FilterChainDefinitionMapFactory {
   
    @Autowired
    private IPermissionService permissionService;
    /*
    *
    *  /login = anon
      /s/permission.jsp = perms[user:index]
     /** = authc
    * */
    public Map<String, String> createMap() {
   
        Map<String, String> map = new LinkedHashMap<>();
        //一定注意顺序
        //不拦截的
        map.put("/login","anon");
        //把所有的静态资源(js,css,图片,...)放行
        map.put("*.js","anon");
        map.put("*.css","anon");
        map.put("/css/**","anon");
        map.put("/js/**","anon");
        map.put("/easyui/**","anon");
        map.put("/images/**","anon");
        //添加权限拦截数据,从数据库中获取
        List<Permission> permissions = permissionService.findAll();
        permissions.forEach(permission -> {
   
            map.put(permission.getUrl(),"perms["+permission.getSn()+"]");
        });
        //拦截所有
        map.put("/**","authc");
        return map;
    }
}
1.2、PermissionRepository,自定义jpql,连接5张表
	public interface PermissionRepository extends BaseRepository<Permission, Long> {
   
    /**
     * 根据用户获取权限
     * 返回的是Set<String>,与AisellRealm对应
     * jpql关连法则:
     *      1,关连前面的类的别名,
     *      2.不需要消除笛卡尔积
     */
    @Query("select p.sn from Employee e join e.roles r join r.permissions p where e.id = ?1")
    Set<String> findSnByUser(Long userId);
}
1.3、AisellRealm
public class AisellRealm extends AuthorizingRealm {
   
    @Autowired
    private IEmployeeService employeeService;
    @Autowired
    private IPermissionService permissionService;

    //授权功能
    protected AuthorizationI
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值