Spring Boot + Spring Cloud 实现权限管理系统 后端篇(二十四):权限控制(Shiro 注解)
                        
                     
                    
                    
                         
    /**      * Shiro生命周期处理器      */     @Bean     public LifecycleBeanPostProcessor lifecycleBeanPostProcessor() {         return new LifecycleBeanPostProcessor();     }          /**      * 开启Shiro的注解(如@RequiresRoles,@RequiresPermissions),需借助SpringAOP扫描使用Shiro注解的类,并在必要时进行安全逻辑验证      * 配置以下两个bean(DefaultAdvisorAutoProxyCreator(可选)和AuthorizationAttributeSourceAdvisor)即可实现此功能      */     @Bean     @DependsOn({"lifecycleBeanPostProcessor"})     public DefaultAdvisorAutoProxyCreator advisorAutoProxyCreator() {         DefaultAdvisorAutoProxyCreator advisorAutoProxyCreator = new DefaultAdvisorAutoProxyCreator();         advisorAutoProxyCreator.setProxyTargetClass(true);         return advisorAutoProxyCreator;     }      @Bean     public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor() {         AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor();         authorizationAttributeSourceAdvisor.setSecurityManager(securityManager());         return authorizationAttributeSourceAdvisor;     } 添加注解
以菜单管理接口为例,添加 @RequiresPermissions("权限标识") 标识即可。
这个权限标识就是我们的菜单表中对应的权限标识字段(perms)对应的值。
SysMenuController.java

package com.louis.kitty.admin.controller;  import java.util.List;  import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController;  import com.louis.kitty.admin.model.SysMenu; import com.louis.kitty.admin.sevice.SysMenuService; import com.louis.kitty.core.http.HttpResult;  /**  * 菜单控制器  * @author Louis  * @date Oct 29, 2018  */ @RestController @RequestMapping("menu") public class SysMenuController {      @Autowired     private SysMenuService sysMenuService;          @RequiresPermissions({"sys:menu:add", "sys:menu:edit"})     @PostMapping(value="/save")     public HttpResult save(@RequestBody SysMenu record) {         return HttpResult.ok(sysMenuService.save(record));     }      @RequiresPermissions("sys:menu:delete")     @PostMapping(value="/delete")     public HttpResult delete(@RequestBody List<SysMenu> records) {         return HttpResult.ok(sysMenuService.delete(records));     }      @RequiresPermissions("sys:menu:view")     @GetMapping(value="/findNavTree")     public HttpResult findNavTree(@RequestParam String userName) {         return HttpResult.ok(sysMenuService.findTree(userName, 1));     }          @RequiresPermissions("sys:menu:view")     @GetMapping(value="/findMenuTree
                        关键字: