zoukankan      html  css  js  c++  java
  • shiro+多tomcat+redis实现session共享

    红色部分为session共享的核心

    <dependency>
    <groupId>org.crazycake</groupId>
    <artifactId>shiro-redis</artifactId>
    <version>2.4.2.1-RELEASE</version>
    <exclusions>
    <exclusion>
    <artifactId>shiro-core</artifactId>
    <groupId>org.apache.shiro</groupId>
    </exclusion>
    </exclusions>
    </dependency>


    @Configuration
    public class ShiroConfig {

    @Bean(name = "shiroFilter")
    public ShiroFilterFactoryBean shiroFilter(SecurityManager securityManager) {
    ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
    shiroFilterFactoryBean.setSecurityManager(securityManager);
    shiroFilterFactoryBean.setLoginUrl("/login.html");
    shiroFilterFactoryBean.setUnauthorizedUrl("/login.html");
    // shiroFilterFactoryBean.setLoginUrl("/loanFlow/user/aaa");
    // shiroFilterFactoryBean.setUnauthorizedUrl("/notRole");
    Map<String, String> filterChainDefinitionMap = new LinkedHashMap<>();
    // <!-- authc:所有url都必须认证通过才可以访问; anon:所有url都都可以匿名访问-->
    filterChainDefinitionMap.put("/loanFlow/user/login", "anon");
    filterChainDefinitionMap.put("/loanFlow/user/getPicCode", "anon");
    filterChainDefinitionMap.put("/loanFlow/user/getPhoneCode", "anon");
    filterChainDefinitionMap.put("/loanFlow/user/register", "anon");
    filterChainDefinitionMap.put("/loanFlow/user/adminLogin", "anon");
    filterChainDefinitionMap.put("/loanFlow/user/forgetPwd", "anon");
    filterChainDefinitionMap.put("/loanFlow/pay/notifyUrl", "anon");
    filterChainDefinitionMap.put("/loanFlow/codeList/scanningCode", "anon");
    filterChainDefinitionMap.put("/", "anon");
    shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
    System.out.println("Shiro拦截器工厂类注入成功");
    return shiroFilterFactoryBean;

    }

    @Bean
    public RedisManager redisManager() {
    RedisManager redisManager = new RedisManager();
    redisManager.setHost("139.9.206.233");
    redisManager.setPort(6379);
    redisManager.setExpire(1800);// 配置缓存过期时间
    redisManager.setTimeout(3000);
    return redisManager;
    }
    @Bean
    public RedisSessionDAO redisSessionDAO(RedisManager redisManager) {
    RedisSessionDAO redisSessionDAO = new RedisSessionDAO();
    redisSessionDAO.setRedisManager(redisManager);
    return redisSessionDAO;
    }
    /**
    * shiro session的管理
    */
    @Bean
    public DefaultWebSessionManager redisSessionManager(RedisSessionDAO redisSessionDAO) {
    DefaultWebSessionManager sessionManager = new DefaultWebSessionManager();
    sessionManager.setSessionDAO(redisSessionDAO);
    return sessionManager;
    }
    @Bean
    public RedisCacheManager redisCacheManager(RedisManager redisManager) {
    RedisCacheManager redisCacheManager = new RedisCacheManager();
    redisCacheManager.setRedisManager(redisManager);
    return redisCacheManager;
    }


    @Bean
    public SecurityManager securityManager(DefaultWebSessionManager redisSessionManager,RedisCacheManager redisCacheManager) {
    DefaultWebSecurityManager defaultSecurityManager = new DefaultWebSecurityManager();
    defaultSecurityManager.setRealm(customRealm());
    defaultSecurityManager.setRememberMeManager(rememberMeManager());
    defaultSecurityManager.setSessionManager(redisSessionManager);
    defaultSecurityManager.setCacheManager(redisCacheManager);
    return defaultSecurityManager;
    }

    // @Bean
    // public DefaultWebSecurityManager securityManager(UserRealm userRealm,DefaultWebSessionManager redisSessionManager,RedisCacheManager redisCacheManager){
    // DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
    // securityManager.setRealm(userRealm);
    // securityManager.setSessionManager(redisSessionManager);
    // securityManager.setCacheManager(redisCacheManager);
    // return securityManager;
    // }

    @Bean
    public CustomRealm customRealm() {
    CustomRealm customRealm = new CustomRealm();
    return customRealm;
    }

    /**
    * Shiro生命周期处理器
    *
    * @return
    */
    @Bean
    public LifecycleBeanPostProcessor lifecycleBeanPostProcessor() {
    return new LifecycleBeanPostProcessor();
    }

    /**
    * 开启Shiro的注解(如@RequiresRoles,@RequiresPermissions),需借助SpringAOP扫描使用Shiro注解的类,并在必要时进行安全逻辑验证
    * 配置以下两个bean(DefaultAdvisorAutoProxyCreator(可选)和AuthorizationAttributeSourceAdvisor)即可实现此功能
    * 不要使用 DefaultAdvisorAutoProxyCreator 会出现二次代理的问题,这里不详述
    *
    * @return
    */
    @Bean
    @DependsOn({"lifecycleBeanPostProcessor"})
    public DefaultAdvisorAutoProxyCreator advisorAutoProxyCreator(){
    DefaultAdvisorAutoProxyCreator advisorAutoProxyCreator = new DefaultAdvisorAutoProxyCreator();
    advisorAutoProxyCreator.setProxyTargetClass(true);
    return advisorAutoProxyCreator;
    }

    /**
    * 开启Shiro注解通知器
    */
    @Bean
    public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(
    @Qualifier("securityManager") SecurityManager securityManager) {
    AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor();
    authorizationAttributeSourceAdvisor.setSecurityManager(securityManager);
    return authorizationAttributeSourceAdvisor;
    }

    /**
    * cookie对象;
    * 记住密码实现起来也是比较简单的,主要看下是如何实现的。
    *
    * @return
    */
    @Bean
    public SimpleCookie rememberMeCookie() {
    System.out.println("ShiroConfiguration.rememberMeCookie()");
    //这个参数是cookie的名称,对应前端的checkbox的name = rememberMe
    SimpleCookie simpleCookie = new SimpleCookie("rememberMe");
    //<!-- 记住我cookie生效时间30天 ,单位秒;-->
    simpleCookie.setMaxAge(259200);
    return simpleCookie;
    }

    /**
    * cookie管理对象;
    *
    * @return
    */
    @Bean
    public CookieRememberMeManager rememberMeManager() {
    System.out.println("ShiroConfiguration.rememberMeManager()");
    CookieRememberMeManager cookieRememberMeManager = new CookieRememberMeManager();
    cookieRememberMeManager.setCookie(rememberMeCookie());
    return cookieRememberMeManager;
    }


    }
    成功后redis

  • 相关阅读:
    CF1435E Solo mid Oracle(推柿子)
    CF1435C Perform Easily(Set)
    NC7501I (反向建图)
    NC7501D Router Mesh (去掉割点算连通快的变化)
    超全的Python第三方库
    字符串常见题目
    IDEA的常用设置大全
    IDEA的介绍与安装
    涨姿势啦(1)
    Torch常用的函数总结
  • 原文地址:https://www.cnblogs.com/shufeiyang/p/12986641.html
Copyright © 2011-2022 走看看