码迷,mamicode.com
首页 > 编程语言 > 详细

spring boot 使用拦截器,注解 实现 权限过滤

时间:2017-10-27 20:40:12      阅读:646      评论:0      收藏:0      [点我收藏+]

标签:创建   判断   doc   student   als   def   没有   hand   int   

这里的权限过滤,配合注解来使用,我目的是只要加上了特定注解的方法,才会进行校验(如果不需要的话,可以将判断注解的逻辑去掉,就跟一般的一样了)
 
1:定义注解:
/**
 * 权限校验
 */
@Documented
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface RoleCheck {
    RoleEnum[] role();
}
userRoleEnum里定义角色的值
 
2:创建RoleInterceptor 类,重写peHandle方法,方法中写具体的校验逻辑
/**
 * 用于角色校验
 *
 */
@Service
public class RoleInterceptor extends BaseHandlerInterceptorAdapter {
     @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    HandlerMethod handlerMethod = (HandlerMethod) handler;
        RoleCheck roleCheck = handlerMethod.getMethodAnnotation(RoleCheck.class);
        //如果方法上没有roleCheck注解,则校验通过
        if (roleCheck == null){
            return true;
        }
        //该方法未赋予权限,不通过
        if (roleCheck.role() == null){
            return false;
        }
    }
}
 
3:在要拦截的方法上加入注解
@RequestMapping(value = {“/getstudent"})
@RoleCheck(role = {RoleEnum.TEACHER})
public String getStudentInfo(@RequestParam String studentNo) {
    return studentManager.getstudentInfoByNo(studentNo);
}
 
2:创建一个自定义的adapter的类,继承WebMvcConfigurerAdapter 类
@Configuration
public class DefineAdapter extends WebMvcConfigurerAdapter {
@Autowired
public RoleInterceptor roleInterceptor;
@Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(roleInterceptor).addPathPatterns("/getstudent");
        super.addInterceptors(registry);
    }
}
重写 addInterceptors方法,将你要拦截的url加入。
 
WebMvcConfigurerAdapter 继承后,拦截器会在工程启动的时候就加入进来

spring boot 使用拦截器,注解 实现 权限过滤

标签:创建   判断   doc   student   als   def   没有   hand   int   

原文地址:http://www.cnblogs.com/zhangXingSheng/p/7744997.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!