<小时/>
下面是过滤器。
@Component
public class TestFilter extends GenericFilterBean {
@Override
public void doFilter(
ServletRequest request,
ServletResponse response,
FilterChain chain) throws IOException, ServletException {
chain.doFilter(request, response);
HttpServletRequest httpRequest = (HttpServletRequest) request;
System.out.println("token is: "+httpRequest.getHeader("token"));
}
}
<小时/>
下面是资源 我只想对第二个请求执行上述过滤器。
如何做到这一点,请帮忙......
@RestController
public class UserResourceImpl implements UserResource {
private final UserDao userDao;
private final AuthenticationService authenticationService;
@Autowired
public UserResourceImpl(final UserDao userDao,final AuthenticationService authenticationService) {
this.userDao = userDao;
this.authenticationService = authenticationService;
}
@Override
@RequestMapping(method = RequestMethod.POST, value = "/api/user", produces = "application/json")
public ResponseEntity<?> create(final User user) {
userDao.save(user);
return new ResponseEntity<>("", HttpStatus.OK);
}
@Override
@RequestMapping(method = RequestMethod.GET, value = "/api/user", produces = "application/json")
public ResponseEntity<?> getUsers(final User user) {
enter code here
// how to execute the above filter for this request only ?
return new ResponseEntity<>("", HttpStatus.OK);
}
}
最佳答案
您可以尝试使用 HandlerInterceptorAdapter 。它通过 url 工作,而不是特定方法,所以它不完全是你想要的,但它应该工作:
public class MyInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//To work with a specific method on the url
if(request.getMethod().equals("GET")){
//Do stuff
}
return super.preHandle(request, response, handler);
}
//There is also a postHandle and postCompletion method that can be override
}
并在WebMvcConfigurerAdapter
中注册它:
public class SpringMvcContextConfig extends WebMvcConfigurerAdapter {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new MyInterceptor()).addPathPatterns("/yourUrl");
}
}
另一个解决方案可能是将 Aspect 与 spring-mvc 结合使用,并在方法上设置 PointCut。
希望有帮助。
关于java - 如何在 spring mvc 中对特定请求执行过滤器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46954110/