后端:
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);