- 创建一个注解AuthToken,所有使用这个注解的方法,均要通过权限验证才能访问。
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface AuthToken {
/**
* 是否只能管理员权限才能访问,默认所有用户都可以访问
*/
boolean admin() default false;
}
- 创建一个拦截器AuthInterceptor,所有请求都通过拦截器
public class AuthInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if (!(handler instanceof HandlerMethod)) {
return true;
}
HandlerMethod handlerMethod = (HandlerMethod) handler;
Method method = handlerMethod.getMethod();
AuthToken authToken = method.getAnnotation(AuthToken.class);
//需要验证的Method
if (authToken != null) {
boolean isAdmin = authToken.admin();
//todo
return true;
}
//无需验证
return true;
}
}
- 注册拦截器
@Configuration
public class AuthConfigurer implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(AuthInterceptor()).addPathPatterns("/**");
}
@Bean
public AuthInterceptor AuthInterceptor() {
return new AuthInterceptor();
}
}
- 在controller方法上添加注解
#需要管理员权限才能访问的
@AuthToken(admin = true)
#普通用户和管理员都能访问的
@AuthToken
#不加注解是所有人都可以访问的,不安全