springmvc拦截器拦截失败

发布于 2022-09-04 21:20:53 字数 3318 浏览 5 评论 0

拦截未登录的用户。
项目结构:
图片描述
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请求确拦截了。。这 到底是怎么回事

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

友欢 2022-09-11 21:20:53

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;  
    }

希望能够帮到你~~~

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文