0%

Spring Boot通过注解实现Restful接口权限控制

创建一个注解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

#不加注解是所有人都可以访问的,不安全