上一篇介绍了自定义注解Annotation的一些分类和写法,现在来结合权限模块,具体说一下实现方式。

一、说明

相对于Shiro等权限框架,通过注解自定义实现起来更加贴合我们的项目需求,没有其他累赘功能,扩展性也很好,根据项目需求可以随时添加新功能。

本系统中的每个权限对应一个唯一字符串,这个字符串需要在数据库中预先设定好。在用户登录的时候,获取到用户绑定的角色,再遍历角色中的所有权限,从而获取到该用户所拥有的所有权限。

二、页面用法

这些权限存储在session中,例:session.setAttribute("xxx权限", true);,这样可以直接在页面中通过c:if判断权限(注:权限字符串中如果有"-",需要在存储到session权限去掉"-")。

三、类中的用法

优点:支持json格式,当权限错误时可以直接返回给客户端,适合ajax调用的接口。


1.在需要验证权限的方法上加上注解

例:

@RequestLog(permission="xxx权限")
public void xxMethod(){}

2.在拦截器中添加相关代码

在preHandle中添加:

if (handler.getClass().isAssignableFrom(HandlerMethod.class)) {
  HandlerMethod handlerMethod = (HandlerMethod) handler;
  RequestLog requestLog = handlerMethod.getMethodAnnotation(RequestLog.class);
  User user = null;
  if (requestLog != null) {
    //....其他日志操作
    //判断权限
    if (!Strings.isEmpty(requestLog.permission()) && user.getUserType() != User.USER_TYPE_ADMIN) {
      System.out.println(requestLog.permission());
      boolean per = permissionService.findByUserAndValue(user.getUid(), requestLog.permission());
      if (!per) {
        Map map = new HashMap<>();
        PrintWriter pw = null;
        fateRequestService.returnError(map, ErrorCodes.PERMISSION_ERROR, "权限不足", fateRequest.getRequestId(), 200, LOG);
        Gson gson = GsonUtil.getGson();
        response.setContentType("text/javascript; charset=utf-8");
        pw = response.getWriter();
        pw.write(gson.toJson(map));
        pw.flush();
        return false;
      }
    }
  }

}

注:写在方法上的时候不需要对权限名称进行过滤。


赞助本站,网站的持续发展离不开你们的支持!一分也是爱ヾ(◍°∇°◍)ノ゙
 本文链接: ,花了好多脑细胞写的,转载请注明链接喔~~
登陆
      正在加载评论
 书籍推荐