用户登录表单提交后为什么servlet里user仍为null?

发布于 2022-09-02 23:45:22 字数 2160 浏览 30 评论 0

public class LoginServlet extends HttpServlet {
    private BusinessService s = new BusinessServiceImpl();
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //获取用户名和密码
        String username = request.getParameter("username");
        String password = request.getParameter("password");//明文
        //验证是否成功
        User user = s.login(SecurityUtil.base64encode(username), SecurityUtil.md5(password));
        //登录失败:提示
        if(user==null){
            response.getWriter().write("错误的用户名或密码");
            return;
        }
        //登录成功:判断是否记住
        HttpSession session = request.getSession();
        session.setAttribute("user", user);
        //记住:用cookie来存。
        String remember = request.getParameter("remember");
        if(remember!=null){
            Cookie c = new Cookie("loginInfo", SecurityUtil.base64encode(username)+"_"+SecurityUtil.md5(password));
            c.setMaxAge(Integer.MAX_VALUE);
            c.setPath(request.getContextPath());
            response.addCookie(c);
        }
        
        //重定向到主页
        response.sendRedirect(request.getContextPath());
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }

}

图片描述

图片描述

图片描述

<form action="${pageContext.request.contextPath}/servlet/LoginServlet" method="post">
        用户名:<input type="text" name="username"/><br/>
        密 码:<input type="password" name="password"/><br/>
        <input type="checkbox" name="remember"/>记住<br/>
        <input type="submit" value="登录"/>
    </form>

求大神解答!到底是哪里的错误

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

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

发布评论

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

评论(5

像极了他 2022-09-09 23:45:22

可以看出传进来的参数是没问题,usernamepassword都有值,然后经过login()后返回null,说明这方法里面你对用户名和密码的加密,经过编码后传到后台和数据库的用户名密码不一致,继续看发型你数据库密码是123,而你的密码经过md5加密后怎么可能还是123
所以直接在login()里面的参数去掉base64md5加密:

User user = s.login(username, password);

应该就可以查询出结果了。

强辩 2022-09-09 23:45:22

1,输出测试一下username和password,看有没有传递过来。
2,如果传递过来了,查看User user = s.login(SecurityUtil.base64encode(username), SecurityUtil.md5(password));中的login()函数,看是不是有问题

十六岁半 2022-09-09 23:45:22

获取的用户名和密码跟数据库存储的不一样吧

画▽骨i 2022-09-09 23:45:22

debug已经传过来了,那就是login()出问题了,再到里面打断点看看

空城缀染半城烟沙 2022-09-09 23:45:22

从你的debug信息里可以看到username和password正常传过来了,所以问题一定是出现在BusinessService类中的login()方法里。
看到你对username,password分别进行了base64编码和md5散列,这时可以查看一下你数据库中的用户名和密码是不是经过处理的(初学者经常会犯这种低级错误)。如果是的话,那问题就出现在login()处理逻辑里了,debug一下应该可以发现问题。

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