zoukankan      html  css  js  c++  java
  • Spring Security设置自动登录和显示当前认证用户名

    当用户勾选了自动登录,在有效时间内,即使用户关闭了浏览器,下次打开也会处于登录状态(前提是没有清空浏览器cookie)

      

    使用Spring Security实现步骤:

      1.在登录页面提供一个选框供用户选择,name的值必须为:remember-me,否则得在remember me过滤器中指定和它对应的名称,value的值必须为:true | on | yes | 1

      <div class="checkbox icheck">
      <label><input type="checkbox" name="remember-me" value="true"> 记住 下次自动登录</label>
      </div>

     2.开启remember me过滤器
    <security:http auto-config="true" use-expressions="true">
            <!--省略其余配置-->
            <!--开启remember me过滤器,设置token存储时间,单位为秒-->
            <security:remember-me token-validity-seconds="60"/>
        </security:http>

      3.启动测试

        

         在浏览器可看到cookie已经被保存下来了,有效期为设定的时间,在设定的时间内即使关闭了浏览器,重新打开,依然处于登录状态

    remember me 安全性分析:

      记住我功能能够提升用户的体验,但是安全性却令人担忧。因为 Cookie毕竟是保存在客户端的,很容易盗取,而且cookie的值还与用户名、密码这些敏感数据相关,虽然加密了,但是将敏感信息存在客户端,还是不太安全。在使用此功能的时候,要注意用完网站要及时手动退出登录,清空认证信息。
      此外,SpringSecurity还提供了remember me的另一种相对更安全的实现机制 :在客户端的cookie中,仅保存一个无意义的加密串(与用户名、密码等敏感数据无关),然后在db中保存该加密串-用户信息的对应关系,自动登录时,用cookie中的加密串,到db中验证,如果通过,自动登录才算通过。
      实现步骤:

        1.创建一张表,注意这张表的名称和字段都是固定的,不能修改。

    CREATE TABLE `persistent_logins` (
        `username` VARCHAR(64) NOT NULL,
        `series` VARCHAR(64) NOT NULL,
        `token` VARCHAR(64) NOT NULL,
        `last_used` TIMESTAMP NOT NULL,
        PRIMARY KEY (`series`)
    ) ENGINE=INNODB DEFAULT CHARSET=utf8;

        2.然后将spring-security.xml中改为:

    <security:http auto-config="true" use-expressions="true">
            <!--
                开启remember me过滤器,
                data-source-ref="dataSource" 指定数据库连接池
                token-validity-seconds="60" 设置token存储时间
                remember-me-parameter="remember-me" 指定记住的参数名 可省略
            -->
            <security:remember-me token-validity-seconds="60"
                                    data-source-ref="dataSource"
                                    remember-me-parameter="remember-me"/>
        </security:http>

        3.最后测试发现数据库中自动多了一条记录:

          选中了记住我功能,表中的数据每登录一次,记录就增多一条,只有主动退出登录,表中的数据才会根据用户名全部清空

          

     显示当前认证用户名

      在jsp页面显示:

        在顶部引入标签

          <%@ taglib prefix="security" uri="http://www.springframework.org/security/tags" %>

        在需要显示的位置使用

          <security:authentication property="principal.username" /> 或者

          <security:authentication property="name" />

      在后台页面显示:

    @RequestMapping("/findAll")
        public String findAll(Model model){
            List<SysUser> list = userService.findAll();
            model.addAttribute("list", list);
    
            // 从后台获取到当前认证通过后的用户名
            String name = SecurityContextHolder.getContext().getAuthentication().getName();
            System.out.println(name);
    
            return "user-list";
        }
  • 相关阅读:
    0001_two_sum
    shell 命令
    先验概率,后验概率,似然函数,最大似然估计【待整理】
    numpy学习笔记
    python: __slots__ 解析 (待整理)
    ubuntu,win7双系统问题
    安装sogou输入法
    pytorch安装
    稀疏向量的一些内容
    extern c
  • 原文地址:https://www.cnblogs.com/roadlandscape/p/12483208.html
Copyright © 2011-2022 走看看