xuanxin33 2017-04-11 06:21 采纳率: 100%
浏览 1366
已采纳

spring mvc 不同权限,拦截器问题

我有一个controller里面有几个函数,有的只允许学生调用,有的只允许管理员调用,有什么办法根据自己的需要使用不同的拦截器呢?
比如book/addbook只允许管理员调用,而book/findbookbyname又允许登陆的人都可以调用,

  • 写回答

2条回答 默认 最新

  • 关注

    自定义一个注解,该注解用于需要做权限控制的方法上。自定义注解比如

     @Target({ElementType.METHOD})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    public @interface AuthActionModel {
        //值可为:student,teacher,当值为all时所有人可访问
        String type() default "all";
    }
    

    在方法上使用实例:

     @AuthActionModel(type="student")
    

    最后就是如何控制权限了,
    思想就是:在自定义拦截的preHandle方法中对当前拦截的请求进行解析,获得当前请求方法的@AuthActionModel(type="student")这个注解
    的type值,如果当前系统登录用户与该type值匹配,则继续执行,否则返回false。

    获得自定义注解的type属性值:
    preHandle方法有个handler参数,做如下处理

    
     HandlerMethod handlerMethod = (HandlerMethod) handler;
     AuthActionModel authActionModel = handlerMethod.getMethodAnnotation(AuthActionModel.class);
    
     if(null!=authActionModel) {
                        String type = authActionModel.type();
                        -----进行其他操作------
    }
    

    打了这么多字不容易,请采纳,如果你看不懂,你需要先了解自定义注解,自定义拦截器,以及拦截器中的preHandler的第三个参数!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器