java.lang.ClassCastException: org.springframework.web.servlet.resource.DefaultServletHttpRequestHand

楔子

使用ssm,HandlerInterceptorAdapter 时,获取执行的方法,出现如下错误

java.lang.ClassCastException: org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler cannot be cast to org.springframework.web.method.HandlerMethod
    at cn.zhuzi.kindle.interceptor.PrivilegeInterceptorAdapter.preHandle(PrivilegeInterceptorAdapter.java:38)
    at org.springframework.web.servlet.HandlerExecutionChain.applyPreHandle(HandlerExecutionChain.java:133)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:962)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)

出错事例


public class PrivilegeInterceptorAdapter extends HandlerInterceptorAdapter {
    @Resource
    JdbcTemplate jdbcTemplate;


    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object preHandle) throws Exception {

        System.out.println(request.getRequestURI());
        /* if (preHandle instanceof HandlerMethod) { */
        //此处出现上述错误。使用了
        HandlerMethod method = (HandlerMethod) preHandle;
        Prev pre = method.getMethod().getAnnotation(Prev.class);
        if (pre == null) {
            return true;
        } else {
            String oprator = pre.oprator();
            String decription = pre.decription();
            System.out.println("操作权限-->" + decription);

            // TODO模拟 从session获取权限
            @SuppressWarnings("unchecked")
            List<String> privilegeList = (List<String>) request.getSession().getAttribute("privilege");

            if (privilegeList.contains(oprator)) {
                return true;
            } else {
                if (request.getHeader("X-Requested-With") != null && request.getHeader("X-Requested-With").equalsIgnoreCase("XMLHttpRequest")) {// 是ajax请求
                    response.setCharacterEncoding("text/html;charset=UTF-8");
                    response.setContentType("text/html;charset=UTF-8");
                    PrintWriter writer = response.getWriter();
                    StringBuffer jsonTip = new StringBuffer("{\"result\":");
                    jsonTip.append(false).append(",\"tip\":\"您无权操作\"}");
                    writer.print(jsonTip.toString());
                    return false;
                } else {// 非ajax请求
                    String content = request.getSession().getServletContext().getContextPath();
                    // response.sendRedirect(content +
                    // "/refuse.html");//转发到页面
                    response.setContentType("text/html;charset=utf-8");
                    response.getWriter().write("您无权操作");
                    return false;
                }
            }

        }
    }
-- 使用   System.out.println(request.getRequestURI()); 打印请求地址时 
发现,只有在请求资源找不到的情况下才会出现上述转换错误。

解决
1 加上  if (preHandle instanceof HandlerMethod) { 做判断
2 不处理,因为请求的资源不存在
  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值