急急急急!!在线等。!Spring拦截器方法进不去,不知道为什么。求大神看看

闭着眼睛写BUG 2015-10-15 07:55:46
新手初次发帖,希望大神们帮帮忙

本来我是用拦截器写一个防止订单重复提交的问题的。搞了很久实在看不出为什么,求各位大神们帮忙看看,
自定义注解
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Token {

boolean needSaveToken() default false;

boolean needRemoveToken() default false;
}


public class TokenInterceptor extends HandlerInterceptorAdapter {

public CacheManager memcachedManager;
private JztIndentityValidator jztIndentityValidator;

/*
* 生成一个唯一值的token
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if (handler instanceof HandlerMethod) {、、这里过不了,一直是false
HandlerMethod handlerMethod = (HandlerMethod) handler;
Method method = handlerMethod.getMethod();
Token annotation = method.getAnnotation(Token.class);

return true;
} else {
return super.preHandle(request, response, handler);
}
}
}

如果不要 if (handler instanceof HandlerMethod) 这一句,或者改为if (handler instanceof CartController) 就会在HandlerMethod handlerMethod = (HandlerMethod) handler;这里强制转换报错,说不能强制转换。

CartController是我需要被拦截的类
@RequestMapping(value = "/nextCart.htm", method = RequestMethod.POST)
@Token(needSaveToken = true)
public ModelAndView nextCart(@ObjectConvertAnno HttpParameterParser httpParser) {

spring中的配置
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
<property name="interceptors">
<list>
<bean class="com.jzt.b2b.support.interceptor.TokenInterceptor" />
</list>
</property>
</bean>
...全文
870 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
bruce_yuan1982 2017-05-02
  • 打赏
  • 举报
回复
引用 17 楼 hhay7758 的回复:
轻在spring-mvc文件中添加 <!-- 启动Spring MVC的注解功能 --> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" /> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" /> 就可以了!!!!!!!!!!!
楼上这位大哥牛!我就在spring框架 xxx-servlet.xml文件中加入这两行代码,然后if (handler instanceof HandlerMethod) 这行判断语句代码就验证通过了! 可以实现拦截器功能了,谢谢楼上的大哥!...orz...
蛋蛋の忧伤 2017-01-03
  • 打赏
  • 举报
回复
轻在spring-mvc文件中添加 <!-- 启动Spring MVC的注解功能 --> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" /> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" /> 就可以了!!!!!!!!!!!
蛋蛋の忧伤 2017-01-03
  • 打赏
  • 举报
回复
我也遇到了和楼主一样的问题!!!!
leikaixin 2016-12-05
  • 打赏
  • 举报
回复
<mvc:annotation-driven /> 你多半没加这句
tony4geek 2015-10-20
  • 打赏
  • 举报
回复
我上面链接也是那么写的没报错的
闭着眼睛写BUG 2015-10-20
  • 打赏
  • 举报
回复
引用 12 楼 rui888 的回复:
 HandlerMethod handlerMethod = (HandlerMethod) handler;
这个强制转化会报错?
对这个强制转化会报错。
  • 打赏
  • 举报
回复
handler.getClass().isAssignableFrom(HandlerMethod.class)你这样判断看是否可以进去。
tony4geek 2015-10-16
  • 打赏
  • 举报
回复
这个Object 的 handler 和HandlerMethod 之间有关系吗? 他们之间必须要有建立关系,实现啊或者子类。 你这个是吗? 这个例子写很清楚。
闭着眼睛写BUG 2015-10-16
  • 打赏
  • 举报
回复
引用 6 楼 rui888 的回复:
过不去,那就不是它的实例。
对,这就是我想问的,我的拦截器配置,我好像没错。所以这里一直没搞懂。
tony4geek 2015-10-16
  • 打赏
  • 举报
回复
过不去,那就不是它的实例。
闭着眼睛写BUG 2015-10-16
  • 打赏
  • 举报
回复
引用 4 楼 rui888 的回复:
只是列举下。是否是它的实例 具体 instanceof if (A instanceof B)
instanceof 的用法,我知道,我想问的是 拦截器中的handler instanceof HandlerMethod ,这段代码为什么过不去
tony4geek 2015-10-16
  • 打赏
  • 举报
回复
只是列举下。是否是它的实例 具体 instanceof if (A instanceof B)
闭着眼睛写BUG 2015-10-16
  • 打赏
  • 举报
回复
引用 2 楼 rui888 的回复:
public class test {
	public static void main(String[] args) {
		Object handler = new Object();
		if (handler instanceof test) {
			System.out.println("====");
		}
		if (handler instanceof Object) {
			System.out.println("++++");
		}
	}
}
不是这样的,拦截器拦截cartController类,所以是cartController instanceof HandlerMethod , 好像你的是Object instanceof test ,这样好像不对。和你的意思不一样
tony4geek 2015-10-16
  • 打赏
  • 举报
回复
 HandlerMethod handlerMethod = (HandlerMethod) handler;
这个强制转化会报错?
tony4geek 2015-10-16
  • 打赏
  • 举报
回复
你看看这个文章 handler 先转化下。。 或者你也可以借鉴他的思路。
闭着眼睛写BUG 2015-10-16
  • 打赏
  • 举报
回复
引用 8 楼 rui888 的回复:
这个Object 的 handler 和HandlerMethod 之间有关系吗? 他们之间必须要有建立关系,实现啊或者子类。 你这个是吗? 这个例子写很清楚。
你说的这些我都知道,可能是我的问题描述错了, 其实我在做的是使用注解形式Token令牌+拦截器 方式防止订单重复提交。结果程序在执行instanceof 的那一步,过不去。 这个防止重复提交出错才是我的问题。 不过,还是谢谢,你的耐心回复
tony4geek 2015-10-15
  • 打赏
  • 举报
回复
public class test {
	public static void main(String[] args) {
		Object handler = new Object();
		if (handler instanceof test) {
			System.out.println("====");
		}
		if (handler instanceof Object) {
			System.out.println("++++");
		}
	}
}
闭着眼睛写BUG 2015-10-15
  • 打赏
  • 举报
回复
没人吗,求大神啊

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧