zoukankan      html  css  js  c++  java
  • 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页面

  • 相关阅读:
    iTextSharp:创建一个新pdf文件
    SQL SERVER 2000/2005中默认不区分大小写
    问题:No VSS database (srcsafe.ini) found. Use the SSDIR environment variable or run netsetup
    直接打印pdf文档
    在sql中应用临时表
    Happy 牛 year!
    控制台打印汉字的方法
    关于文档写作、幻灯片制作以及资料整理的一点见解
    借助weka实现的分类器进行针对文本分类问题的特征词选择实验(实验代码备份)
    国际会议级别[备份]
  • 原文地址:https://www.cnblogs.com/zhai1997/p/13753460.html
Copyright © 2011-2022 走看看