猿问

Spring - 在调用控制器的方法之前执行代码

在调用控制器中的方法之前,是否有任何类似于@PreAuthorize或@PreFilter我可以用来运行代码的注释?


我需要将信息添加到请求上下文(特定于被调用的方法),然后由ExceptionHandler.


例如


@RestController

public MyController{


  @UnkwonwAnnotation("prepareContext(request.getAgentId())"){

  public ResponseEntity method1(RequestA requestA) {

    ...

  }


  @UnkwonwAnnotation("prepareContext(request.getUserName())"){

  public ResponseEntity method1(RequestB requestB) {

    ...

  }


}

我实际上可以使用@PreAuthorize但感觉不对


米琪卡哇伊
浏览 182回答 3
3回答

拉丁的传说

您可以为此添加拦截器样本拦截器public class CustomInterceptor implements HandlerInterceptor {        @Override    public boolean preHandle(HttpServletRequest request,HttpServletResponse  response) {    //Add Login here         return true;    }} 配置@Configurationpublic class MyConfig extends WebMvcConfigurerAdapter {    @Override    public void addInterceptors(InterceptorRegistry registry) {        registry.addInterceptor(new MyCustomInterceptor()).addPathPatterns("/**");    }}希望这可以帮助

哆啦的时光机

也许一个不错的选择是实现一个自定义过滤器,该过滤器在每次收到请求时运行。您需要扩展“OncePerRequestFilter”并覆盖方法“doFilterInternal”public class CustomFilter extends OncePerRequestFilter {    @Override    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response,                                    FilterChain filterChain) throws ServletException, IOException {        //Add attributes to request        request.getSession().setAttribute("attrName", new String("myValue"));        // Run the method requested by petition        filterChain.doFilter(request, response);        //Do something after method runs if you need.    }}在您必须在 Spring 中使用 FilterRegistrationBean 注册过滤器之后。如果你有 Spring 安全,你需要在安全过滤器之后添加你的过滤器。

Helenr

Spring Aspect 也是在控制器之前执行代码的好选择。@Component@Aspectpublic class TestAspect {    @Before("execution(* com.test.myMethod(..)))")    public void doSomethingBefore(JoinPoint jp) throws Exception {        //code      }}这里myMethod()将在控制器之前执行。
随时随地看视频慕课网APP

相关分类

Java
我要回答