• shiro:RememberMe


    1、概念

    原始方式:用户选择了记住密码以后,就会将账号和密码存储到cookie,当再次登录的时候输入用户名之后就立即根据用户名获取到对应的密码。

    shiro的记住我:

    目标:将用户对页面访问的权限分为三个级别:未认证可访问的页面(登录页)、已认证可访问的页面、曾经认证可访问的页面(index,记住我可访问)

    2、RememberMe的使用

    (1)在过滤器中设置记住我可以访问的url

    filterMap.put("/index.html", "user");

    user:使用remberme的用户可访问

    (2)配置RememberMeManager

      @Bean
        public CookieRememberMeManager getCookieRememberMeManager(){
            CookieRememberMeManager rememberMeManager=new CookieRememberMeManager();
            SimpleCookie simpleCookie=new SimpleCookie("rememberMe");
            simpleCookie.setMaxAge(30*24*60*60);
            rememberMeManager.setCookie(simpleCookie);
            return rememberMeManager;
        }

    (3)将配置好的RememberMeManager交给安全管理器

        @Bean//安全管理器
        public DefaultWebSecurityManager getDefaultWebSecurityManager(MyRealm myRealm,EhCacheManager ehCacheManager) {
            DefaultWebSecurityManager defaultSecurityManager = new DefaultWebSecurityManager();
            defaultSecurityManager.setRealm(myRealm);//SecurityManager完成校验需要realm
            defaultSecurityManager.setCacheManager(ehCacheManager);
            defaultSecurityManager.setSessionManager(getDefaultWebSessionManager());
            defaultSecurityManager.setRememberMeManager(getCookieRememberMeManager());
            return defaultSecurityManager;
        }

    (4)定义登录页面

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>login</title>
    </head>
    <body>
        <form action="/user/login">
            用户名:<input type="text" name="username"><br>
            密码:<input type="password" name="password"><br>
            记住我:<input type="checkbox" name="rememberMe">
            <input type="submit" value="提交">
        </form>
    </body>
    </html>

    (5)传递rememberMe参数

    在controller层获取到参数rememberMe参数并传递到service层:

        @RequestMapping("login")
        public String login(String username,String password,boolean rememberMe){
            try{
                userService.checkLogin(username,password,rememberMe);
                System.out.println("成功");
                System.out.println(username+password);
                return "index";
            }catch (Exception e){
                e.printStackTrace();
                System.out.println("失败");
                System.out.println(username+password);
                return "login";
            }
        }

    service层获取到controller层的数据:

    @Service
    public class UserService {
        public void checkLogin(String username,String password,boolean rememberme) throws Exception{
            Subject subject= SecurityUtils.getSubject();
            UsernamePasswordToken token=new UsernamePasswordToken(username,password);
            token.setRememberMe(rememberme);
            subject.login(token);
        }
    }

    (6)测试

    输入用户名和密码进行登录:

     登录成功:

    关闭浏览器,直接访问index页面:只要cookie还存在就可以在不登录的情况下直接访问index页面

  • 相关阅读:
    idea破解
    metasploit常用命令(持續更新...)
    metasploit魔鬼训练营_XSS
    渗透测试流程
    中国电信猫后接路由器具体设置
    python首次尝试——hello world
    【阿圆总结】关于平时阅读的推荐
    【转载】curl 模拟 GETPOST 请求,curl查看响应头 以及 curl post 上传文件
    【转载】用实例给新手讲解RSA加密算法
    【翻译】Open ID Connect---OIDC 是什么东西?
  • 原文地址:https://www.cnblogs.com/zhai1997/p/13753460.html
Copyright © 2020-2023  润新知