IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> ssm整合--免登录功能 -> 正文阅读

[大数据]ssm整合--免登录功能

免登录功能

/*
* 10天免登录操作
*   第一部分业务:在登录的时候操作,login.do
*   1.用户登录,勾选10天免登录
*       i.给复选框一个标识,将标识传递到后台
*       ii.后台接收到标识后,开始进行免登录操作
*   2.将用户名和密码存入cookie中(传统项目可以,金融/电商不允许这样操作)
*     安全问题?
*       i.拦截器会拦截其他请求,只放行了登录请求和跳转到登录页面的请求
*       ii.由于在我们输入密码以后,会对密码进行MD5加密操作,
*           故存入cookie中的数据都是加密后的数据,即使加密后的数据泄漏,也无法登录,
*           因为在登录时会对密码再次加密,二次加密后的密码,与数据库中的密码无法对应
*   3.设置cookie的一些属性:
*       i.cookie过期时间:60*60*24*10  10天
*       ii.cookie的存放路径:/ 根目录下,保证在任意路径下都能访问到cookie中的数据
*
*   第二部分业务:对跳转到登录页面的请求进行操作,toLogin.do
*   4.获取cookie中的用户名和密码
*   5.自动进行登录
*       调用service.login()方法进行登录
*   6.将自动登录后的用户存入session中
*
*/
  1. 拦截器

    在web.xml中配置

    <!--
    	欢迎页面
    	当访问http://127.0.0.1:8080/crm时,会自动找到index.jsp
    -->
    <welcome-file-list>
        <welcome-file>/index.jsp</welcome-file>
    </welcome-file-list>
    

    在index.jsp中配置

    <!--跳转到登录页面-->
    <script type="text/javascript">
       document.location.href = "settings/user/toLogin.do";
    </script>
    

    在applicationContext-web.xml中配置

    <!--
        权限控制的拦截器
    -->
    <mvc:interceptors>
        <mvc:interceptor>
            <!--对所有的请求都拦截-->
            <mvc:mapping path="/**"/>
            <!--对登录请求放行-->
            <mvc:exclude-mapping path="/settings/user/login.do"/>
            <!--对跳转到登录页面的请求放行-->
            <mvc:exclude-mapping path="/settings/user/toLogin.do"/>
            <!--注册的拦截器-->
            <bean class="com.mryang.crm.interceptor.LoginInterceptor"/>
        </mvc:interceptor>
    </mvc:interceptors>
    

    在拦截器中设置

    public class LoginInterceptor implements HandlerInterceptor {
    
        /**
         * 控制器方法执行 之前 执行的方法
         */
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws Exception {
            // 只有用户登录后才放行
            User user = (User) request.getSession().getAttribute("user");
            if (user == null){//用户未登录,抛出异常
                // 异常处理器会帮我们重定向到登录页面 
                // InterceptorException():自定义异常
                throw new InterceptorException();
            }
            return true;
        }
    
        /**
         * 控制器方法执行 之后 执行的方法
         */
        @Override
        public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
    
        }
    
        /**
         * 页面接在完成后执行的方法
         */
        @Override
        public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
    
        }
    }
    
  2. 前端操作

    1. 给免登录复选框一个标识

      https://raw.githubusercontent.com/iiimaster/PicGO/master/img/image-20210926132128058.png

    2. 复选框添加点击事件

      //10天免登录操作
      // 给复选框添加点击事件
      $("#loginFlag").click(function () {
         // 获取复选框状态
         var flag = $("#loginFlag").prop("checked")
      
         if (flag){//选中标记,并自定义标识值
            $("#flag").val("select")
         }else{//未选中
            $("#flag").val("")
         }
         // alert($("#flag").val())
      })
      
    3. 点击登录时获取标识信息

      // 10天免登录标记
      var flag = $("#flag").val()
      // 使用ajax进行数据传递
      
      
  3. 后端操作

    1. 执行登录操作时,login.do

      // 首先接收flag的值
      
      // 其次只有在用户验证通过后才能进行此操作,否则写入cookie中的信息有可能是错误
      if ("select".equals(flag)){
      
          // 将用户名和密码存放到cookie中
          Cookie loginActCookie = new Cookie("loginAct", loginAct);
          // 密码要存入加密后的密码
          Cookie loginPwdCookie = new Cookie("loginPwd", md5Pwd);
          // cookie的相关参数
          int editTime = 60*60*24*10;// 10天
          // 设置cookie的过期时间
          loginActCookie.setMaxAge(editTime);
          loginActCookie.setPath("/");
          loginPwdCookie.setMaxAge(editTime);
          loginPwdCookie.setPath("/");
      
          // 将cookie对象写回浏览器
          response.addCookie(loginActCookie);
          response.addCookie(loginPwdCookie);
      
      }
      
    2. 跳转登录页面时,toLogin.do

      // 获取cookie
      Cookie[] cookies = request.getCookies();
      // 将cookie中的值与用户名和密码进行对比
      String loginAct=null;
      String loginPwd=null;
      for (Cookie cookie : cookies) {
          if ("loginAct".equals(cookie.getName())){
              // 获取到用户名称
              loginAct = cookie.getValue();
              // 结束本次循环
              continue;
          }
          if ("loginPwd".equals(cookie.getName())){
              loginPwd = cookie.getValue();
          }
      }
      
      // 自动登录操作
      if (loginAct != null && loginPwd != null) {// 获取到了用户名和密码
      
          // 获取用户ip
          String ip = request.getRemoteAddr();
      
          // 执行自动登录
          User autoLoginUser = userService.login(loginAct, loginPwd, ip);
      
          if (autoLoginUser != null){// 登录成功
              // 将user存储到session中
              request.getSession().setAttribute("user", autoLoginUser);
              // 如果登录成功,直接跳转到首页
              return "redirect:/workbench/toIndex.do";
          }
      }
      
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-09-27 14:09:28  更:2021-09-27 14:09:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 23:08:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码