[英]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.