springmvc拦截器拦截失败

拦截未登录的用户。
项目结构:
图片描述
web.xml

    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    </servlet>
    <!-- url-pattern配置为/,不带文件后缀,会造成其它静态文件(js,css等)不能访问。如配为*.do,则不影响静态文件的访问 -->
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>
    
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>

拦截器配置:

<!-- 拦截器 -->
    <mvc:interceptors>
        <!-- 多个拦截器,顺序执行 -->
        <mvc:interceptor>
            <mvc:mapping path="/bank/**" />
            <bean class="com.ayyll.interceptor.LoginInterceptor"></bean>
        </mvc:interceptor>
    </mvc:interceptors>

拦截器编写:

public class LoginInterceptor implements HandlerInterceptor {
    
    //Handler执行完成之前调用这个方法 
    @Override
    public boolean preHandle(HttpServletRequest request,
            HttpServletResponse response, Object handler) throws Exception {
        
        //获取Session  
        HttpSession session = request.getSession();  
        String username = (String)session.getAttribute("username");  
        //System.out.println(username == null);
        if(username == null){ 
            System.out.println("尚未登陆");
            response.sendRedirect("/index.jsp");  
            return false;  
        }  
        
        return true;  
    }
    //Handler执行之后,ModelAndView返回之前调用这个方法 
    @Override
    public void postHandle(HttpServletRequest request,
            HttpServletResponse response, Object handler,
            ModelAndView modelAndView) throws Exception {
        // TODO Auto-generated method stub

    }
    //Handler执行完成之后调用这个方法 
    @Override
    public void afterCompletion(HttpServletRequest request,
            HttpServletResponse response, Object handler, Exception ex)
            throws Exception {
        // TODO Auto-generated method stub
    }

}

controller:

@RequestMapping(value = "/login.do", method = RequestMethod.POST)
public @ResponseBody
    Map<String, Object> login(HttpServletRequest request) throws IOException {
        
        UserDao udao = new UserDaoImpl();
        User user = new User();
        String username = request.getParameter("username");
        user.setUsername(username);
        user.setPassword(request.getParameter("password"));
        List<User> ans = udao.queryUser(user);

        Map<String, Object> map = new HashMap<String, Object>();
        HttpSession session = request.getSession();
        
        // 密码正确
        if (ans.size() > 0) {
            map.put("msg", "yes");
            session.setAttribute("username",username);
        } else {
            map.put("msg", "no");
        }

        return map;
    }

后台能够输出 尚未登陆这句话,但是response.sendRedirect("/index.jsp");好像没执行,反正就拦截了没效果,能进去bank下的页面,但是里面的ajax请求确拦截了。。这 到底是怎么回事

阅读 5k
1 个回答

1.没有跳转登录页面,应该是你打开 index.jsp 路径的问题。相对路径是不是读不到
response.sendRedirect(request.getContextPath()+"/index.jsp")
2、还能打开bank下面的页面是因为拦截器中判断条件的不完整

String url = request.getRequestURI();
if(username == null && &&url.indexOf("index") == -1  ){ 
        System.out.println("尚未登陆");
        response.sendRedirect(request.getContextPath()+"/index.jsp")  
        return false;  
    }

希望能够帮到你~~~

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题