gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 01:53:18 25 4
gpt4 key购买 nike

我有一个提供数十个 API 的网络服务。我想让它们在自动调用后执行一些操作,例如检查授权,而不需要手动调用。

例如,我有 3 个 API,如下所述:

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

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

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

当然,我可以在每个 API 中调用 checkAuthorization() 方法,但这非常麻烦、多余且不安全,因为我或其他作者可能会忘记这样做。

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

最佳答案

您可以使用拦截器来实现此目的。

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

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

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

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 ());
}
}

preHandle() 中编写您的 checkAuthorization() 逻辑。希望这会有所帮助。

关于java - 如何在 Java 中为 Web 服务中的每个 API 调用特定方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55334282/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com