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

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

输入账号密码点登录还是这个页面,没变化,网址变成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 ios可以实现ymodem-1k协议 1024字节传输吗?
  • ¥300 寻抓云闪付tn组成网页付款链接
  • ¥15 请问Ubuntu要怎么安装chrome呀?
  • ¥15 视频编码 十六进制问题
  • ¥15 Xsheii7我安装这个文件的时候跳出来另一个文件已锁定文件的无一部分进程无法访问。这个该怎么解决
  • ¥15 unity terrain打包后地形错位,跟建筑不在同一个位置,怎么办
  • ¥15 FileNotFoundError 解决方案
  • ¥15 uniapp实现如下图的图表功能
  • ¥15 u-subsection如何修改相邻两个节点样式
  • ¥30 vs2010开发 WFP(windows filtering platform)