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


    登录功能优化

    注销功能:

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

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

    1. package com.rgf.servlet.user;
    2. import com.rgf.util.Constants;
    3. import javax.servlet.ServletException;
    4. import javax.servlet.http.HttpServlet;
    5. import javax.servlet.http.HttpServletRequest;
    6. import javax.servlet.http.HttpServletResponse;
    7. import java.io.IOException;
    8. public class LogoutServlet extends HttpServlet {
    9. @Override
    10. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    11. //移除用户的Constants.USER_SESSION
    12. req.getSession().removeAttribute(Constants.USER_SESSION);
    13. //移除之后要回到登录页面,返回登录界面
    14. resp.sendRedirect("/login.jsp");//我们也可以在前面添加req.getContextPath()+,确保地址不会出错。
    15. }
    16. @Override
    17. protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    18. doGet(req, resp);
    19. }
    20. }

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

    1. LogoutServlet
    2. com.rgf.servlet.user.LogoutServlet
    3. LogoutServlet
    4. /user/logout

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

     
  • "${pageContext.request.contextPath }/user/logout">退出系统
  • 我们进行运行如下所示:
    我们进入登陆界面如下所示:

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

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

     

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

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

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

     登录拦截优化:

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

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

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

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

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

    1. package com.rgf.filter;
    2. import com.rgf.pojo.User;
    3. import com.rgf.util.Constants;
    4. import javax.servlet.*;
    5. import javax.servlet.http.HttpServletRequest;
    6. import javax.servlet.http.HttpServletResponse;
    7. import java.io.IOException;
    8. public class SysFilter implements Filter {
    9. @Override
    10. public void init(FilterConfig filterConfig) throws ServletException {
    11. }
    12. @Override
    13. public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
    14. HttpServletRequest request = (HttpServletRequest) req; //获取他的session
    15. HttpServletResponse response = (HttpServletResponse) resp; //重定向
    16. //过滤器,从session中获取用户,
    17. User user = (User) request.getSession().getAttribute(Constants.USER_SESSION);
    18. if(user==null){//该用户已经被移除或者注销了,或者未登录
    19. response.sendRedirect("../error.jsp");
    20. }else{
    21. chain.doFilter(req,resp);
    22. }
    23. }
    24. @Override
    25. public void destroy() {
    26. }
    27. }

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

    1. <filter>
    2. <filter-name>SysFilterfilter-name>
    3. <filter-class>com.rgf.filter.SysFilterfilter-class>
    4. filter>
    5. <filter-mapping>
    6. <filter-name>SysFilterfilter-name>
    7. <url-pattern>/jsp/*url-pattern>
    8. filter-mapping>

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

    1. <%@ page language="java" contentType="text/html; charset=UTF-8"
    2. pageEncoding="UTF-8"%>
    3. "Content-Type" content="text/html";charset="UTF-8">
    4. Insert title here
    5. 请登录后再访问该页面

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

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

  • 相关阅读:
    C++ Reference: Standard C++ Library reference: C Library: cwchar: wscanf
    避免defer陷阱:拆解延迟语句,掌握正确使用方法
    基于Docker+Jenkins+Gitl搭建持续集成环境(部分关键笔记)
    springbootspringboot杏林中医诊所管理系统133742
    sCrypt 合约中的椭圆曲线算法:第二部分
    RK3399平台开发系列讲解(内核调试篇)IO 数据工具:iostat和iotop
    Vue中如何封装组件,如何进行跨组件通信
    VsCode的leetcode插件无法登录
    java基础回顾与进阶
    day40
  • 原文地址:https://blog.csdn.net/weixin_59448049/article/details/127031204