haw*_*eye 5 java spring spring-mvc spring-annotations
我想在 Spring 3 mvc 中做 @CustomFilter 注释,如下所示:
@CustomFilter
@RequestMapping("/{id}")
public Account retrieve(@PathVariable Long id) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
(假设升级到 Spring 4 受到限制)目前我必须对 Spring 3 做的事情如下所示:
public class CustomFilter implements Filter {
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;
HttpServletRequest request = (HttpServletRequest) req;
....
chain.doFilter(req, res);
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:如何在 Spring 3 MVC 中执行触发过滤器的 @CustomAnnotation 注释?
您可以使用HandlerInterceptor.
创建您的标记注释:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface CustomFilter {
}
Run Code Online (Sandbox Code Playgroud)
创建一个HandlerInterceptor:
public class CustomFilterHandlerInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws
Exception {
if (handler instanceof HandlerMethod) {
HandlerMethod handlerMethod = (HandlerMethod) handler;
// Test if the controller-method is annotated with @CustomFilter
CustomFilter filter = handlerMethod.getMethod().getAnnotation(CustomFilter.class);
if (filter != null) {
// ... do the filtering
}
}
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
注册拦截器:
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**" />
<bean class="com.example.CustomFilterHandlerInterceptor" />
</mvc:interceptor>
</mvc:interceptors>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3432 次 |
| 最近记录: |