SMBMS超市管理系统(三:注销功能实现,登录功能优化)

登录功能优化

注销功能:

思路:移除session,返回登录页面。

我们在servlet层下面的user包里面创建LogoutServlet:

package com.rgf.servlet.user;

import com.rgf.util.Constants;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class LogoutServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       //移除用户的Constants.USER_SESSION
        req.getSession().removeAttribute(Constants.USER_SESSION);
        //移除之后要回到登录页面,返回登录界面
        resp.sendRedirect("/login.jsp");//我们也可以在前面添加req.getContextPath()+,确保地址不会出错。

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

之后我们在web.xml里面进行注册:

 <servlet>
        <servlet-name>LogoutServlet</servlet-name>
        <servlet-class>com.rgf.servlet.user.LogoutServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>LogoutServlet</servlet-name>
        <!--其中的访问地址我们可以在jsp文件夹里面的common下的head.jsp找到退出系统的地址-->
        <url-pattern>/user/logout</url-pattern>
    </servlet-mapping>

我们在注册的过程中遇到的退出系统的地址我们在jsp里面的common下的head.jsp进行查找:

 <li><a href="${pageContext.request.contextPath }/user/logout">退出系统</a></li>

我们进行运行如下所示:
我们进入登陆界面如下所示:

 我们登录成功后如下所示:

之后,我们点击退出,发现出现如下所示:

 

我们发现应该是重定向出现了错误。我们将代码进行修改如下所示“

 resp.sendRedirect(req.getContextPath()+"/login.jsp");

 我们进行重启后进行退出如下所示:

 登录拦截优化:

我们发现我们登录进去之后,我们将网站:http://localhost:9571/smbms0/jsp/frame.jsp

复制下来之后。退出系统。我们访问该网站的时候,又再一次的进入了系统。

我们应该是退出系统之后,就无法再进入系统了,就无法登录了。但是我们再退出系统之后还是可以进行访问。我们通过过滤器来进行优化。

编写一个过滤器,并进行注册:

我们在filter包里面进行注册SysFilter类:

package com.rgf.filter;

import com.rgf.pojo.User;
import com.rgf.util.Constants;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class SysFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest  request = (HttpServletRequest) req;   //获取他的session
        HttpServletResponse response = (HttpServletResponse) resp;  //重定向
    //过滤器,从session中获取用户,
        User user = (User) request.getSession().getAttribute(Constants.USER_SESSION);
    if(user==null){//该用户已经被移除或者注销了,或者未登录
        response.sendRedirect("../error.jsp");

    }else{
        chain.doFilter(req,resp);
    }
    }

    @Override
    public void destroy() {

    }
}

之后我们在web.xml里面进行注册如下所示:

<!--用户登录过滤器-->
    <filter>
        <filter-name>SysFilter</filter-name>
        <filter-class>com.rgf.filter.SysFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>SysFilter</filter-name>
        <!--如果想访问jsp下面的页面,必须要首先进行登录-->
        <url-pattern>/jsp/*</url-pattern>
    </filter-mapping>

同时我们还需要编写无法登录的界面:

<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8"%>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html";charset="UTF-8">
    <title>Insert title here</title>
  </head>
  <body>
  <h1>请登录后再访问该页面</h1>
  <a href="login.jsp">返回</a>
  </body>
</html>

之后我们进行运行,如下所示:我们成功登录进去之后,退出系统,通过复制网站进去之后,我们发现如下所示:

 测试,登录,注销,权限都要保证OK。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一直再追梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值