ssm权限管理代码与图解

3 篇文章 0 订阅

权限管理代码与图解

在这里插入图片描述

@getter@setter
public class Permission extends BaseDomain{
    private String name;//权限名称
    private String expression;//权限表达式,每一个权限唯一描述
}

public abstract class PermissionUtil {
    public  static String buildExpression(Method m){
        //方法所在类的全限定名:方法名称
        String className = m.getDeclaringClass().getName();
        return className+":"+m.getName();
    }
}
@Controller
@RequestMapping("permission")
public class PermissionController {
    @Autowired
    private IPermissionService permissionService;
    /**
     * 加载权限
     * @return 不需要返回视图
     * @throws Exception
     */
    @RequiredPermission("加载权限")
    @RequestMapping("reload")
    public ModelAndView reload() throws Exception{
        permissionService.reload();
        return null;
    }
}

public interface IPermissionService {
    /*
    * 加载系统中的权限
    * */
    void reload();
}
 
@Service
public class PermissionServiceImpl implements IPermissionService {
    @Autowired
    private PermissionMapper permissionMapper;

    @Autowired
    private ApplicationContext ctx;

    public void reload() {
        //先查询数据库中已有的权限表达式
        List<String> exprs = permissionMapper.selectAllExpression();
        //1:从容器中获取到所有的Controller对象
        Collection<?> beans = ctx.getBeansWithAnnotation(Controller.class).values();
        for (Object ctrl : beans) {
            //2:拿到Controller对象对应的字节码,获取Controller中所有的方法对象
            Method[] methods = ctrl.getClass().getDeclaredMethods();
            for (Method m : methods) {
                //3:判断每一个方法是否有权限注解
                RequiredPermission anno = m.getAnnotation(RequiredPermission.class);
                if (anno != null){
                    //4:从自定义工具类中获取到权限表达式
                    String exp = PermissionUtil.buildExpression(m);
                    //5:判断exprs集合中有没有exp子字符串,不包含该权限才保存
                    if (!exprs.contains(exp)){
                        //6:如果有注解,把该方法做成一个权限对象保存到数据库
                        Permission p = new Permission();
                        p.setName(anno.value());
                        p.setExpression(exp);
                        //7:保存到数据库
                        permissionMapper.insert(p);
                    }
                }
            }
        }
    }
}
public interface PermissionMapper {
    //把需要被标注为权限的查询出来保存到数据库中
    void insert(Permission entity);

    //查询数据库中已有的权限
    List<String> selectAllExpression();
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"  
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="xxx.PermissionMapper">
	<insert id="insert" useGeneratedKeys="true" keyProperty="id">
		insert into permission(name,expression)
		values (#{name},#{expression})
	</insert>

	<select id="selectAllExpression" resultType="string">
		select expression from permission;
	</select>
</mapper>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值