晶. 2022-05-21 23:38 采纳率: 92.1%
浏览 51
已结题

使用拦截器之后无法登录网页

输入账号密码点登录还是这个页面,没变化,网址变成http://localhost:8080/login
注释掉拦截器网页都可以用,也可以登录加上拦截器就登陆不了了

img


```java
package controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import pojo.User;

import javax.servlet.http.HttpSession;

@Controller
public class UserController {
    @RequestMapping("/main1")
    public String main(){

        return "main";
    }

    @RequestMapping("/toLogin")
    public String toLogin(){

        return "login";
    }

    @RequestMapping("/toOrderInfo")
    public String toOrderInfo(){

        return "orderinfo";
    }

    //登录
    @RequestMapping("/login")
    public String login(User user, Model model,HttpSession session){

        //判断用户名和密码
        String username = user.getUsername();
        String password = user.getPassword();
        if (username!=null&&"李硕".equals(username)&&password!=null&&"123456".equals(password)){
            //登录成功
            session.setAttribute("user",user);

            return "redirect:main";
        }else{
            //登陆失败
            model.addAttribute("msg","用户名或者密码错误");
            return "login";
        }
    }


    //退出成功,需要跳转到登陆页面
    @RequestMapping("/logout")
    public String logOut(HttpSession session){

        session.invalidate();

        return "login";
    }
}


package interceptor;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class LoginInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //针对登录和跳转到登录页面的进行放行
        String requestURI=request.getRequestURI();
        if (requestURI.indexOf("/login")>0||
        requestURI.indexOf("/toLogin")>0){
            //直接放行
            return true;
        }
        //其他请求需要做登陆权限拦截判断
        HttpSession session = request.getSession();
        Object user = session.getAttribute("user");
        if (user!=null){
            //登录成功,放行
            return true;
        }
        //没有登录,跳转到登录页面
        request.setAttribute("msg","您还没有登录,请先登录");
        //此处视图解析器不生效,原生Javweb技术;
        request.getRequestDispatcher("/WEB-INF/jsp/login.jsp")
                .forward(request,response);

        return false;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

    }
}


```

img

img

  • 写回答

1条回答 默认 最新

  • 皮蛋不吃粥 2022-05-22 11:26
    关注

    可以用debug追踪一下代码,看看是否逻辑不正确

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 5月30日
  • 已采纳回答 5月22日
  • 修改了问题 5月22日
  • 创建了问题 5月21日

悬赏问题

  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。
  • ¥20 CST怎么把天线放在座椅环境中并仿真
  • ¥15 任务A:大数据平台搭建(容器环境)怎么做呢?
  • ¥15 YOLOv8obb获取边框坐标时报错AttributeError: 'NoneType' object has no attribute 'xywhr'
  • ¥15 r语言神经网络自变量重要性分析
  • ¥15 基于双目测规则物体尺寸
  • ¥15 wegame打不开英雄联盟
  • ¥15 公司的电脑,win10系统自带远程协助,访问家里个人电脑,提示出现内部错误,各种常规的设置都已经尝试,感觉公司对此功能进行了限制(我们是集团公司)
  • ¥15 救!ENVI5.6深度学习初始化模型报错怎么办?