假设我们有两个拦截器“ LogInterceptor”和“ AuthInterceptor”。第一个拦截器记录传入的请求,第二个拦截器对它进行身份验证。目的:链接LogIntercptor和AuthInterceptor。首先,我希望调用logInterceptor,然后执行AuthInterceptor。注意:我知道“重定向”并返回false(请不要提出建议)
---------------------Log Interceptor---------------------------------------
//First Inteceptor
@Component
public class LogInterceptor extends HandlerInterceptorAdapter
{
private final Logger Logger =
LoggerFactory.getLogger(this.getClass());
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
//take action base on incoming IP
long startTime = System.currentTimeMillis();
request.setAttribute("startTime",startTime);
if(request.getRemoteAddr().startsWith("192"))
{
response.sendRedirect("/auth-failed"); //redirect to default
return false;
}
return true;
}
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler, @Nullable ModelAndView
modelAndView) throws Exception
{
}
@Override
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object handler, @Nullable Exception
ex) throws Exception
{
}
}
//第二个拦截器“但是代码还不完整,我只是想知道如何实现。” 类AuthInterceptor {
}
您只需要确保Interceptor
在配置时按所需顺序添加即可InterceptorRegistry
:
@EnableWebMvc
@Configuration
public class WebConfig implements WebMvcConfigurer{
@Autowired
private LogInterceptor logInterceptor;
@Autowired
private AuthInterceptor authInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(logInterceptor);
registry.addInterceptor(authInterceptor);
}
}
如果您有多个WebMvcConfigurer
,则可以简单地@Order
用来控制的执行顺序WebMvcConfigurer
(值越小优先级越高):
@EnableWebMvc
@Configuration
@Order(1)
public class FooWebConfig implements WebMvcConfigurer{
}
@EnableWebMvc
@Configuration
@Order(2)
public class BarWebConfig implements WebMvcConfigurer{
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句