版权声明:本文为博主原创文章,未经博主允许不得转载。 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 实现拦截器
- 继承HandlerInterceptorAdapter 实现拦截器
- 拦截器中实现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) {
}