繁体   English   中英

如何使用Java为Web服务中的每个API调用特定方法?

[英]How to invoke a specific method for each API in a web-service in Java?

我有一个提供数十种API的网络服务。 我想让他们每个人在自动调用后就执行某些操作,例如检查授权,而无需手动调用。

例如,我得到了3个如下所述的API:

@POST
public Response postSome() {
   checkAuthorization();
   ...
}

@GET
public Response getSome() {
   checkAuthorization();
   ...
}

@DELETE
public Response deleteSome() {
   checkAuthorization();
   ...
}

当然,我可以在每个API中调用checkAuthorization()方法,但是这样做很麻烦,冗长且不安全,因为我或其他编写者可能会忘记这样做。

是否有任何方法(例如继承 )或其他方法可以实现此目的,所以我不必在每次创建新的API时都调用checkAuthorization()吗? 谢谢。

您可以使用Interceptor来实现。

Spring允许您通过处理程序拦截器拦截Web请求。 处理程序拦截器必须实现HandlerInterceptor接口,该接口包含三种方法:

preHandle() –在处理程序执行之前调用,返回一个布尔值“ true”:继续处理程序执行链; “ false”,停止执行链并返回它。

postHandle() –在处理程序执行之后调用,允许在渲染ModelAndView对象以查看页面之前对其进行操作。

afterCompletion() –在完成请求之后调用。 很少使用,找不到任何用例。

public class AuthenticationInterceptor extends HandlerInterceptorAdapter {

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception exception)
    throws Exception {
    // TODO Auto-generated method stub

    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
    throws Exception {
    // TODO Auto-generated method stub

    }

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
     checkAuthorization()
    }


}

实现AppConfig类或在现有Configuration类之一中添加addInterceptors。

@Configuration  
public class AppConfig extends WebMvcConfigurerAdapter  {  

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
       registry.addInterceptor(new AuthenticationInterceptor ());
    }
} 

写下您的checkAuthorization()逻辑preHandle() 希望这可以帮助。

您可以检查不同级别的授权

您可以创建一个调用checkAuthorization方法的方法级别注释,然后仅注释每个方法。 这可能会导致代码更简洁,但是您不必忘记对方法进行注释即可。

您可以创建一个Web服务拦截器-针对每个传入请求执行的一段代码,但是实现将取决于所使用的框架

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM