web商城项目笔记-16.使用注解技术限制更为细粒度的权限控制

后端:

1.创建一个枚举类对象Role

		枚举就是被阉割掉的类,不能写公共构造方法
		就是声明了什么就只能用什么,不能从外部创建
	    这里面就是定义了两个属性
		ADMIN,USER;

2.使用枚举给权限注解添加一个属性叫做value,默认值user

		叫做value的属性名可以不写
		标识含义就是普通用户
		Role value()default Role.USER;

3.在baseservlet中

		 try {
				Method method = this.getClass().getDeclaredMethod(md, HttpServletRequest.class, HttpServletResponse.class);
				/*3.需要在方法执行之前判断,在BaseServlet中
				获取方法后,invoke执行方法之前if判断有没
				有这个注解,使用method.isAnnotationPresent(传人.class)
				反射方法获得判断Auth注解有没有.
				4.有的话把验证用户登录功能的代码复制过来*/
				if (method.isAnnotationPresent(Auth.class)){
					User user = (User) request.getSession().getAttribute("user");
					if (user==null){
						nologin(response);
						return;
					}
				   /* 走到这必然是登录状态
					获取注解的值
					反射api method.getAnnotation()
					返回的值调用value方法就获得了注解值
					判断当前注解是不是管理员.equals */
					Auth auth = method.getAnnotation(Auth.class);
					Role role = auth.value();
					if (role.equals(Role.ADMIN)){
						//如果是管理员
						String remark = user.getRemark();
						//自己规定remark==0是管理员
						//remark==1 为普通用户
						if (!"0".equals(remark)){
							//如果你不是返回非法访问
							//使用ResultVo对象有一个code值
							//转换成json格式返回
							ResultVo vo = new ResultVo(ResultVo.CODE_AUTH_FAIL, "非法访问");
							response.getWriter().print(JSONObject.fromObject(vo).toString());
							return;
						}
					}
				}

				//参数1 传自己this 参数2 request,response
				method.invoke(this, request, response);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值