Spring Boot常用注解(四) - 自定义注解实现权限校验

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lipinganq/article/details/80516208

一.自定义注解

Spring Boot常用注解(一) - 元注解中介绍了解释注解的注解,根据元注解我们可以编写自己的注解。
下面自定义注解,利用Spring的拦截器拦截某些浏览器请求,并进行权限校验

二. 自定义注解

根据Spring Boot常用注解(一) - 元注解中自定义一个作用在类或方法上的注解

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Authority {
    String value();
}

三.利用HandlerInterceptorAdapter实现注解处理

3.1 抽象类HandlerInterceptorAdapter

HandlerInterceptorAdapter是Spring MVC中的处理器拦截器,继承HandlerInterceptorAdapter类可以实现不同功能的拦截器:

public abstract class HandlerInterceptorAdapter implements HandlerInterceptor {
    public HandlerInterceptorAdapter() {
    }

    /**
     * 在业务处理器处理请求之前被调用
     *
     * @param handler 业务处理器实例对象
     * @return true  : 表示继续流程,如调用下一个拦截器或处理器
     *         false : 表示流程中断,不会继续调用其他的拦截器或处理器
     */
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        return true;
    }

    /**
     * 在业务处理器处理请求执行完成后,生成视图之前执行,此时页面还没渲染
     */
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    }

    /**
     * 在整个请求处理完毕回调方法,即在视图渲染完毕时回调,可用于资源清理
     */
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    }
}
3.2 实现拦截器
  1. 继承HandlerInterceptorAdapter 实现拦截器
  2. 拦截器中实现Authority注解处理流程
public class AuthorityInterceptor extends HandlerInterceptorAdapter {

    public AuthorityInterceptor() {
    }

    public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object handler) throws Exception {
        Authority functionAuth = null;
        try {
            if (handler instanceof HandlerMethod) {
                functionAuth = (Authority)((HandlerMethod)handler).getMethodAnnotation(Authority.class);
                if (functionAuth != null) {
                    String code = functionAuth.value();
                    if (StringUtils.isBlank(code)) {
                        return true;
                    } else {
                       // todo
                       return true;
                    }
                } else {
                    return true;
                }
            } else {
                return true;
            }
        } catch (Exception var9) {
            // todo
            return false;
        }
    }

    public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object handler, ModelAndView modelAndView) throws Exception {
    }

    public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object handler, Exception e) throws Exception {
    }
}
3.3 在xml中配置拦截器
<mvc:interceptors>
    <mvc:interceptor>
        <mvc:mapping path="/**" />
        <bean id="authorityInterceptor" class="com.demo.springmvc.AuthorityInterceptor"></bean>
    </mvc:interceptor>
</mvc:interceptors>

四.@Authority注解使用

@Authority("changeMerchantInfoAudit")
@RequestMapping(value = "/market/merchant/changeMerchantInfo",method = {RequestMethod.GET,RequestMethod.POST})
public @ResponseBody Result changeMerchantInfo(MarketMerchant merchant, HttpServletRequest request, HttpServletResponse response) {

}

猜你喜欢

转载自blog.csdn.net/lipinganq/article/details/80516208