吃菜得鸟 2022-11-06 10:20 采纳率: 0%
浏览 68
已结题

session和拦截器的使用

问题遇到的现象和发生背景

javaweb 登录注册后,设置Filter判断session过期,实现登录比如几秒后自动跳转到登录页面

用代码块功能插入代码,请勿粘贴截图

—数据保存

package javabean;

import java.util.HashMap;
import java.util.Map;

public class DBUtil {
    //首先创建一个Map集合,用来保存添加的用户
    private static Map<String,User> map=new HashMap<String, User>();
    //判断改用户名是否被注册过
    //boolean containsKey(Object value)    判断集合是否包含指定的值
    public Boolean addUser(String username,String password,int age,String sex) {
        if(map.containsKey(username)) {
            return false;
        }else {
            User user=new User(username, password, age, sex);
            map.put(username, user);
            return true;
        }

    }
    //判断改用户名和密码是否输入正确
    public static User LoginUser(String username,String password) {
        if(map.containsKey(username)) {
            User user=map.get(username);
            if (user.getPassword().equals(password)) {
                return user;
            }
            return null;
        }
        return null;
    }
}

—home.jsp登录页面

<%--
  Created by IntelliJ IDEA.
  User: yx
  Date: 2022/10/29
  Time: 14:12
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>用户登录</title>
    <script src="jquery-3.5.1.min.js" type="text/javascript"></script>
    <script src="bootstrap.min.js"></script>
    <link rel="stylesheet" href="bootstrap.min.css" />
    <link type="text/css" rel="stylesheet" href="css/style.css" />


</head>
<body>
<%
    //对传入的数据进行接受并显示
    Object key=request.getAttribute("key");
    if(key!=null)
        out.println(key);
%>
<form action="logindo.jsp" method="post">
    <div class="mycenter">
        <div class="mysign">
            <div class="col-lg-11 text-center text-info">
                <h2>请登录</h2>
            </div>
            <div class="col-lg-10">
                <input type="text" class="form-control" name="username" placeholder="请输入账户名" required autofocus/>
            </div>
            <div class="col-lg-10"></div>
            <div class="col-lg-10">
                <input type="password" class="form-control" name="password" placeholder="请输入密码" required autofocus/>
            </div>
            
            
            
            
            
            <div class="col-lg-10">
                <button type="submit" class="btn btn-success col-lg-12">登录</button>
                <a href="zhuce.jsp" class="btn btn-success col">注册</a>
            </div>
        </div>
    </div>
</form>

<style>

    .col-lg-10 .btn-success{
        width: 70px;
    }
    .col-lg-10 .col{
        /*padding-right: 20px;*/
        margin-top: 7px;
    }
    .col-lg-10 a{
        position: absolute;
        right: -8px;
        /*margin-right: 20px;*/
    }
</style>
<script>

</script>
</body>
</html>

—zhuce注册页面

<%@ page language="java" contentType="text/html; charset=utf-8"
         pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Insert title here</title>
</head>
<body>
<%--action 将输入的数据传入注册处理页面--%>
<form action="zhucedo.jsp" method="post">
    用户名:<input type="text" name="username"><br>
    密 码:<input type="password" name="password"><br>
    年 龄:<input type="text" name="age"><br>
    性 别: 男<input type="radio" value="男" name="sex"><input type="radio" name="sex" value="女">
    <input type="submit" value="注册">
</form>
</body>
</html>



—zhecudo注册判断

<%@page import="javabean.DBUtil"%>
<%@ page import="javabean.User" %>
<%@ page language="java" contentType="text/html; charset=utf-8"
         pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Insert title here</title>
</head>
<body>
<%
    //获取传递过来的数据
    String username=request.getParameter("username");
    String password=request.getParameter("password");
    //将request.getParameter();转换成为int型,使用Integer.parseInt()方法
    int age=Integer.parseInt(request.getParameter("age"));
//因为在运行是系统会用默认的编码格式对传入的数据进行编码而原本的iso-8859-1,而这编码格式没有中文因此会产生乱码问题
//通过系统默认的编码格式进行解码,在通过设置utf-8的编码
    String sex=new String(request.getParameter("sex").getBytes("iso-8859-1"),"utf-8");
//创建DBUtil类对注册的用户数据进行判断
    DBUtil util=new DBUtil();
    Boolean b=util.addUser(username, password, age, sex);
//    User user=DBUtil.LoginUser(username, password);
    User user=DBUtil.LoginUser(username, password);
    if(b==true){
//注册成功后用getRequestDispatcher将页面跳转到登录页面,setAttribute用来传递不同的参数
//在登录界面接收后呈现出不同的数据用于区分跳转的页面和直接登录页面
//        out.print("<script>alert('用户名或密码错误!请重新输入!');window.location.href='home.jsp'</script>");
        HttpSession session1=request.getSession();
        session1.setMaxInactiveInterval(8);
        request.setAttribute("key", "注册成功,请登录!");
        session1.setAttribute("user",user);
        request.getRequestDispatcher("/home.jsp").forward(request, response);

    }
%>


</body>
</html>


—logindo

<%@page import="javabean.User"%>
<%@page import="javabean.DBUtil"%>
<%@ page import="java.io.PrintWriter" %>
<%@ page language="java" contentType="text/html; charset=utf-8"
         pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Insert title here</title>
</head>
<body>
<%
//    PrintWriter out = response.getWriter();
    String username=request.getParameter("username");
    String password=request.getParameter("password");
    User user=DBUtil.LoginUser(username, password);
    HttpSession session1 = request.getSession();
    //    User user=(User)request.getAttribute("user");

    //处理乱码
    if(user==null){
            request.getRequestDispatcher("home.jsp").forward(request, response);
    }else {
//        Cookie cookie=new Cookie("user",username);
//        cookie.setMaxAge(8);
//        response.addCookie(cookie);
//        HttpSession session1=request.getSession();
//        session1.setMaxInactiveInterval(8);
//        session1.setAttribute("user",user);
//        HttpSession session1 = request.getSession();
//        session1.setAttribute("user",user);
//        out.println("登录成功!");
//登录成功跳转到用户信息页面
        session1.setAttribute("user", user);
//        response.sendRedirect("/mvc/flower.jsp");
        request.getRequestDispatcher("flower.jsp").forward(request, response);
    }
 %>
</body>
</html>



—商品页面

<%--
  Created by IntelliJ IDEA.
  User: yx
  Date: 2022/11/6
  Time: 10:07
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<table>
    <tr>
        <td width="100px"></td><td  width="100">鲜花名称</td>  <td  width="100">鲜花单价</td>
    </tr>
    <form action="buycar.jsp" method="post">
        <tr>
            <td  width="150px"><img  style="height:100px" src="./ph/玫瑰花.jpg"  name="pic"></td>
            <td>玫瑰花</td>
            <td>$520</td><td>
            <input type="submit" name="buy" value="加入购物车"></td>
        </tr>
        <%--在web开发过程中,对于在页面存储但不需要显示出来的值,我们通常使用上面的代码来存储。--%>
        <input type="hidden" name="flowername" value="玫瑰花">
        <input type="hidden" name="price" value="$520">
    </form>

    <form action="buycar.jsp" method="post">
        <tr>
            <td  width="150px"><img  style="height:100px" src="./ph/五彩花.jpg"  name="pic"> </td>
            <td>五彩花</td>
            <td>$400</td><td>
            <input type="submit" name="buy" value="加入购物车"></td>
        </tr>
        <%--        <input type="hidden" name="pic" value="img">--%>
        <input type="hidden" name="flowername" value="五彩花">
        <input type="hidden" name="price" value="$400">
    </form>

    <form action="buycar.jsp" method="post">
        <tr>
            <td  width="150px"><img  style="height:100px" src="./ph/拜杰花.jpg"  name="pic"></td>
            <td>拜杰花</td>
            <td>$150</td><td>
            <input type="submit" name="buy" value="加入购物车"></td>
        </tr>
        <input type="hidden" name="flowername" value="拜杰花">
        <input type="hidden" name="price" value="$150">
    </form>

    <form action="buycar.jsp" method="post">
        <tr>
            <td width="150px"><img  style="height:100px" src="./ph/油头花.jpg" name="pic"></td>
            <td>油头花</td>
            <td>$230</td><td>
            <input type="submit" name="buy" value="加入购物车"></td>
        </tr>
        <input type="hidden" name="flowername" value="油头花">
        <input type="hidden" name="price" value="$230">
    </form>

    <form action="buycar.jsp" method="post">
        <tr>
            <td  width="150px"><img style="height:100px" src="./ph/紫罗兰.jpg" name="pic" ></td>
            <td>紫罗兰</td><td>$140</td>
            <td><input type="submit" name="buy" value="加入购物车"></td>
        </tr>
        <input type="hidden" name="flowername" value="紫罗兰">
        <input type="hidden" name="price" value="$140">
    </form>

</table>
<a href="buycar.jsp">查看购物车</a>
</body>
</html>



运行结果及报错内容

无法实现session设置时间后,无法跳转到登录页面,拦截器布置到设置哪一个页面

我想要达到的结果

javaweb 登录注册后,设置Filter判断session过期,实现登录比如几秒后自动跳转到登录页面

  • 写回答

3条回答 默认 最新

  • 夜郎king 2022博客之星IT其它领域TOP 12 2022-11-06 10:33
    关注

    注册后跳转到哪里需要根据业务判断一下,一般不难。拦截器不是设置到哪个界面,拦截器是作用所有的请求,除了登录外都需要进拦截器,在拦截器中判断session有没有过期,没有过期就放行,否则重定向到登录页面。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 11月9日
  • 创建了问题 11月6日

悬赏问题

  • ¥15 python怎么在已有视频文件后添加新帧
  • ¥20 虚幻UE引擎如何让多个同一个蓝图的NPC执行一样的动画,
  • ¥15 fluent里模拟降膜反应的UDF编写
  • ¥15 MYSQL 多表拼接link
  • ¥15 关于某款2.13寸墨水屏的问题
  • ¥15 obsidian的中文层级自动编号
  • ¥15 同一个网口一个电脑连接有网,另一个电脑连接没网
  • ¥15 神经网络模型一直不能上GPU
  • ¥15 pyqt怎么把滑块和输入框相互绑定,求解决!
  • ¥20 wpf datagrid单元闪烁效果失灵