• remember me实现


    修改ShiroConfig

    秘钥长度为16位,使用的时AES加密。

    @Configuration
    public class ShiroConfig {
        @Autowired
        private MyRealm myRealm;
        @Bean
        public DefaultWebSecurityManager securityManager() {
            DefaultWebSecurityManager manager = new DefaultWebSecurityManager();
            HashedCredentialsMatcher hashedCredentialsMatcher = new HashedCredentialsMatcher();
            hashedCredentialsMatcher.setHashAlgorithmName("md5");
            hashedCredentialsMatcher.setHashIterations(2);
            myRealm.setCredentialsMatcher(hashedCredentialsMatcher);
            manager.setRealm(myRealm);
            manager.setRememberMeManager(rememberMeManager());
            return manager;
        }
        /**
         * cookie 属性设置
         */
        public SimpleCookie rememberMeCookie()
        {
            SimpleCookie cookie = new SimpleCookie("rememberMe");
    //        cookie.setDomain(domain);
            cookie.setPath("/");
            cookie.setHttpOnly(true);
            cookie.setMaxAge(30 * 24 * 60 * 60);
            return cookie;
        }
    
        /**
         * 记住我
         */
        public CookieRememberMeManager rememberMeManager()
        {
            CookieRememberMeManager cookieRememberMeManager = new CookieRememberMeManager();
            cookieRememberMeManager.setCookie(rememberMeCookie());
            cookieRememberMeManager.setCipherKey(Base64.decode("MTIzNDU2NzgxMjM0NTY3OA=="));
            return cookieRememberMeManager;
        }
        @Bean
        public ShiroFilterChainDefinition shiroFilterChainDefinition() {
            DefaultShiroFilterChainDefinition definition = new DefaultShiroFilterChainDefinition();
            definition.addPathDefinition("/doLogin", "anon");
            definition.addPathDefinition("/logout", "logout");
            definition.addPathDefinition("/**", "user");
            return definition;
        }
    
        @Bean
        public ShiroDialect shiroDialect() {
            return new ShiroDialect();
        }
    }
    

      

    修改控制器方法

    修改控制doLogin方法,在UsernamePasswordToken中添加第三个参数。表示是否启用remember me功能。

    此功能应该在页面中添加一个复选框,代码中直接假设用户勾选了复选框

    @RequestMapping("/doLogin")
    public String showLogin(User user){
        Subject subject = SecurityUtils.getSubject();
        try {
            //添加第三个参数,表示是否启用rememberme功能
            subject.login(new UsernamePasswordToken(user.getUsername(),user.getPassword(),true));
            return "redirect:/showIndex";
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "redirect:/showLogin";
    }
    

      

  • 相关阅读:
    ProxySQL查看所有的全局变量及更新操作
    MySQL8.0报错:Access denied; you need (at least one of) the SYSTEM_USER privilege(s) for this operation
    ProxySQL 使用情况报错问题汇总及解决办法
    ProxySQL(7):详述ProxySQL的路由规则
    ProxySQL(1):简介和安装
    ProxySQL配置之MySQL服务器配置
    ProxySQL(6):管理后端节点
    小心使用replicate_do_db和replicate_ignore_db
    ProxySQL Cluster 概述
    ProxySQL(3):Admin管理接口
  • 原文地址:https://www.cnblogs.com/vincentmax/p/14340053.html
Copyright © 2020-2023  润新知