zoukankan      html  css  js  c++  java
  • springboot集成shiro——登陆记住我

     在shiro配置类中增加两个方法:

    com.resthour.config.shrio.ShiroConfiguration

     1  /**
     2      * cookie管理对象
     3      * @return
     4      */
     5     @Bean
     6     public CookieRememberMeManager cookieRememberMeManager(){
     7         log.info("shiroConfiguration:rememberMeManager");
     8         CookieRememberMeManager cookieRememberMeManager = new CookieRememberMeManager();
     9         cookieRememberMeManager.setCookie(rememberMeCookie());
    10         return cookieRememberMeManager;
    11     }
    12 
    13     @Bean
    14     public SimpleCookie rememberMeCookie(){
    15         log.info("shiroConfiguration:rememberMeCookie");
    16         /*这个参数是cookie的名称,对应前端页面的checkbox的name=remremberMe*/
    17         SimpleCookie simpleCookie = new SimpleCookie("rememberMe");
    18         /*cookie的有效时间为30天,单位秒*/
    19         simpleCookie.setMaxAge(259200);
    20         return simpleCookie;
    21     }

    将rememberMeCookie注入到SecurityManager中

     1  @Bean
     2     public SecurityManager securityManager() {
     3         DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
     4         /*设置realm*/
     5         securityManager.setRealm(myShiroRealm());
     6         /*注入缓存管理器*/
     7         securityManager.setCacheManager(ehCacheManager());
     8         /*注入cookie管理器*/
     9         securityManager.setRememberMeManager(cookieRememberMeManager());
    10         return securityManager;
    11     }

    在shiro过滤器加入记住我过滤器

     1 @Bean
     2     public ShiroFilterFactoryBean shirFilter(SecurityManager securityManager) {
     3         log.info("ShiroFilterFactoryBean 实例化");
     4         ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
     5         shiroFilterFactoryBean.setSecurityManager(securityManager);
     6 
     7         Map<String, String> filterChainDefinitionMap = new LinkedHashMap<>();
     8         filterChainDefinitionMap.put("/logout", "logout");
     9         /*匿名可以访问的地址*/
    10         filterChainDefinitionMap.put("/favicon.ico", "anon");
    11         filterChainDefinitionMap.put("/user/tologin", "anon");
    12 
    13         /*配置记住我或认证通过可以访问的地址*/
    14         filterChainDefinitionMap.put("/user/index", "user");
    15         filterChainDefinitionMap.put("/", "user");
    16         /*所有路径必须授权访问,且必须放在最后*/
    17         filterChainDefinitionMap.put("/**", "authc");
    18         /*登陆提交地址*/
    19         shiroFilterFactoryBean.setLoginUrl("/user/login");
    20         /*验证通过可以访问的地址*/
    21         shiroFilterFactoryBean.setSuccessUrl("/user/index");
    22         /*访问没有授权的资源*/
    23         shiroFilterFactoryBean.setUnauthorizedUrl("/403");
    24 
    25         shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
    26 
    27         return shiroFilterFactoryBean;
    28     }

    然后在登陆页面加入多选框记住我,关键name的值必须和shiro配置类中参数一致

    SimpleCookie simpleCookie = new SimpleCookie("rememberMe");
     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>登陆页面</title>
     6 </head>
     7 <body>
     8     错误信息:<h4 th:text="${msg}"></h4>
     9     <form action="/user/login" method="post">
    10         <p>帐号:<input type="text" name="username" value="admin"></p>
    11         <p>密码:<input type="text" name="password" value="1234"></p>
    12         <p><input type="submit"  value="登陆"><input type="checkbox" name="rememberMe">记住我</p>
    13     </form>
    14 
    15 </body>
    16 </html>

    最后附上完整的shiro配置类

      1 package com.resthour.config.shrio;
      2 
      3 import com.resthour.realm.MyShiroRealm;
      4 import lombok.extern.slf4j.Slf4j;
      5 import org.apache.shiro.cache.ehcache.EhCacheManager;
      6 import org.apache.shiro.mgt.SecurityManager;
      7 import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor;
      8 import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
      9 import org.apache.shiro.web.mgt.CookieRememberMeManager;
     10 import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
     11 import org.apache.shiro.web.servlet.SimpleCookie;
     12 import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator;
     13 import org.springframework.context.annotation.Bean;
     14 import org.springframework.context.annotation.Configuration;
     15 
     16 import java.util.LinkedHashMap;
     17 import java.util.Map;
     18 
     19 /**
     20  * shiro配置类
     21  *
     22  * @author baobao
     23  * @date 2018-04-01 14:48
     24  */
     25 @Configuration
     26 @Slf4j
     27 public class ShiroConfiguration {
     28 
     29     @Bean
     30     public ShiroFilterFactoryBean shirFilter(SecurityManager securityManager) {
     31         log.info("ShiroFilterFactoryBean 实例化");
     32         ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
     33         shiroFilterFactoryBean.setSecurityManager(securityManager);
     34 
     35         Map<String, String> filterChainDefinitionMap = new LinkedHashMap<>();
     36         filterChainDefinitionMap.put("/logout", "logout");
     37         /*匿名可以访问的地址*/
     38         filterChainDefinitionMap.put("/favicon.ico", "anon");
     39         filterChainDefinitionMap.put("/user/tologin", "anon");
     40 
     41         /*配置记住我或认证通过可以访问的地址*/
     42         filterChainDefinitionMap.put("/user/index", "user");
     43         filterChainDefinitionMap.put("/", "user");
     44         /*所有路径必须授权访问,且必须放在最后*/
     45         filterChainDefinitionMap.put("/**", "authc");
     46         /*登陆提交地址*/
     47         shiroFilterFactoryBean.setLoginUrl("/user/login");
     48         /*验证通过可以访问的地址*/
     49         shiroFilterFactoryBean.setSuccessUrl("/user/index");
     50         /*访问没有授权的资源*/
     51         shiroFilterFactoryBean.setUnauthorizedUrl("/403");
     52 
     53         shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
     54 
     55         return shiroFilterFactoryBean;
     56     }
     57 
     58     @Bean
     59     public SecurityManager securityManager() {
     60         DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
     61         /*设置realm*/
     62         securityManager.setRealm(myShiroRealm());
     63         /*注入缓存管理器*/
     64         securityManager.setCacheManager(ehCacheManager());
     65         /*注入cookie管理器*/
     66         securityManager.setRememberMeManager(cookieRememberMeManager());
     67         return securityManager;
     68     }
     69 
     70     /**
     71      * 自定义realm
     72      * @return
     73      */
     74     @Bean
     75     public MyShiroRealm myShiroRealm() {
     76         MyShiroRealm myShiroRealm = new MyShiroRealm();
     77         return myShiroRealm;
     78     }
     79 
     80 
     81     /**
     82      *  开启Shiro的注解(如@RequiresRoles,@RequiresPermissions),需借助SpringAOP扫描使用Shiro注解的类,并在必要时进行安全逻辑验证
     83      * 配置以下两个bean(DefaultAdvisorAutoProxyCreator和AuthorizationAttributeSourceAdvisor)即可实现此功能
     84      * @return
     85      */
     86     @Bean
     87     public DefaultAdvisorAutoProxyCreator advisorAutoProxyCreator(){
     88         DefaultAdvisorAutoProxyCreator advisorAutoProxyCreator = new DefaultAdvisorAutoProxyCreator();
     89         advisorAutoProxyCreator.setProxyTargetClass(true);
     90         return advisorAutoProxyCreator;
     91     }
     92 
     93     /**
     94      * 开启aop注解支持
     95      * @param securityManager
     96      * @return
     97      */
     98     @Bean
     99     public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager) {
    100         AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor();
    101         authorizationAttributeSourceAdvisor.setSecurityManager(securityManager);
    102         return authorizationAttributeSourceAdvisor;
    103     }
    104 
    105     /**
    106      * 缓存管理对象
    107      * @return
    108      */
    109     @Bean
    110     public EhCacheManager ehCacheManager(){
    111         EhCacheManager ehCacheManager = new EhCacheManager();
    112         ehCacheManager.setCacheManagerConfigFile("classpath:config/ehcache-shiro.xml");
    113         return ehCacheManager;
    114     }
    115 
    116     /**
    117      * cookie管理对象
    118      * @return
    119      */
    120     @Bean
    121     public CookieRememberMeManager cookieRememberMeManager(){
    122         log.info("shiroConfiguration:rememberMeManager");
    123         CookieRememberMeManager cookieRememberMeManager = new CookieRememberMeManager();
    124         cookieRememberMeManager.setCookie(rememberMeCookie());
    125         return cookieRememberMeManager;
    126     }
    127 
    128     @Bean
    129     public SimpleCookie rememberMeCookie(){
    130         log.info("shiroConfiguration:rememberMeCookie");
    131         /*这个参数是cookie的名称,对应前端页面的checkbox的name=remremberMe*/
    132         SimpleCookie simpleCookie = new SimpleCookie("rememberMe");
    133         /*cookie的有效时间为30天,单位秒*/
    134         simpleCookie.setMaxAge(259200);
    135         return simpleCookie;
    136     }
    137 
    138 
    139 
    140 }
  • 相关阅读:
    SciPy
    时间序列
    bytes 与 str 转换
    tensorflow
    Python3+Cuda+Cudnn+GPU
    TensorFlow models
    saltstack
    docker
    分布式文件系统
    创建RHCS集群环境 创建高可用Apache服务
  • 原文地址:https://www.cnblogs.com/bbthome/p/8708205.html
Copyright © 2011-2022 走看看