1. 程式人生 > >Spring boot整合Mybatis Redis Shiro

Spring boot整合Mybatis Redis Shiro

/**
 * Created by yangqj on 2017/4/23.
 */
@Configuration
public class ShiroConfig {
    @Autowired(required = false)
    private ResourcesService resourcesService;

    @Value("${spring.redis.host}")
    private String host;

    @Value("${spring.redis.port}")
    private int port;

    @Value("${spring.redis.timeout}")
    private int timeout;

    @Bean
    public static LifecycleBeanPostProcessor getLifecycleBeanPostProcessor() {
        return new LifecycleBeanPostProcessor();
    }

    /**
     * ShiroDialect,為了在thymeleaf裡使用shiro的標籤的bean
     * @return
     */
    @Bean
    public ShiroDialect shiroDialect() {
        return new ShiroDialect();
    }
    /**
     * ShiroFilterFactoryBean 處理攔截資原始檔問題。
     * 注意:單獨一個ShiroFilterFactoryBean配置是或報錯的,因為在
     * 初始化ShiroFilterFactoryBean的時候需要注入:SecurityManager
     *
     Filter Chain定義說明
     1、一個URL可以配置多個Filter,使用逗號分隔
     2、當設定多個過濾器時,全部驗證通過,才視為通過
     3、部分過濾器可指定引數,如perms,roles
     *
     */
    @Bean
    public ShiroFilterFactoryBean shirFilter(SecurityManager securityManager){
        System.out.println("ShiroConfiguration.shirFilter()");
        ShiroFilterFactoryBean shiroFilterFactoryBean  = new ShiroFilterFactoryBean();

        // 必須設定 SecurityManager
        shiroFilterFactoryBean.setSecurityManager(securityManager);
        // 如果不設定預設會自動尋找Web工程根目錄下的"/login.jsp"頁面
        shiroFilterFactoryBean.setLoginUrl("/login");
        // 登入成功後要跳轉的連結
        shiroFilterFactoryBean.setSuccessUrl("/usersPage");
        //未授權介面;
        shiroFilterFactoryBean.setUnauthorizedUrl("/403");
        //攔截器.
        Map<String,String> filterChainDefinitionMap = new LinkedHashMap<String,String>();

        //配置退出 過濾器,其中的具體的退出程式碼Shiro已經替我們實現了
        filterChainDefinitionMap.put("/logout", "logout");
        filterChainDefinitionMap.put("/css/**","anon");
        filterChainDefinitionMap.put("/js/**","anon");
        filterChainDefinitionMap.put("/img/**","anon");
        filterChainDefinitionMap.put("/font-awesome/**","anon");
        //<!-- 過濾鏈定義,從上向下順序執行,一般將 /**放在最為下邊 -->:這是一個坑呢,一不小心程式碼就不好使了;
        //<!-- authc:所有url都必須認證通過才可以訪問; anon:所有url都都可以匿名訪問-->
        //自定義載入許可權資源關係
        List<Resources> resourcesList = resourcesService.queryAll();
         for(Resources resources:resourcesList){

            if (StringUtil.isNotEmpty(resources.getResurl())) {
                String permission = "perms[" + resources.getResurl()+ "]";
                filterChainDefinitionMap.put(resources.getResurl(),permission);
            }
        }
        filterChainDefinitionMap.put("/**", "authc");


        shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
        return shiroFilterFactoryBean;
    }


    @Bean
    public SecurityManager securityManager(){
        DefaultWebSecurityManager securityManager =  new DefaultWebSecurityManager();
        //設定realm.
        securityManager.setRealm(myShiroRealm());
        // 自定義快取實現 使用redis
        //securityManager.setCacheManager(cacheManager());
        // 自定義session管理 使用redis
        securityManager.setSessionManager(sessionManager());
        return securityManager;
    }

    @Bean
    public MyShiroRealm myShiroRealm(){
        MyShiroRealm myShiroRealm = new MyShiroRealm();
        myShiroRealm.setCredentialsMatcher(hashedCredentialsMatcher());
        return myShiroRealm;
    }

    /**
     * 憑證匹配器
     * (由於我們的密碼校驗交給Shiro的SimpleAuthenticationInfo進行處理了
     *  所以我們需要修改下doGetAuthenticationInfo中的程式碼;
     * )
     * @return
     */
    @Bean
    public HashedCredentialsMatcher hashedCredentialsMatcher(){
        HashedCredentialsMatcher hashedCredentialsMatcher = new HashedCredentialsMatcher();

        hashedCredentialsMatcher.setHashAlgorithmName("md5");//雜湊演算法:這裡使用MD5演算法;
        hashedCredentialsMatcher.setHashIterations(2);//雜湊的次數,比如雜湊兩次,相當於 md5(md5(""));

        return hashedCredentialsMatcher;
    }


    /**
     *  開啟shiro aop註解支援.
     *  使用代理方式;所以需要開啟程式碼支援;
     * @param securityManager
     * @return
     */
    @Bean
    public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager){
        AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor();
        authorizationAttributeSourceAdvisor.setSecurityManager(securityManager);
        return authorizationAttributeSourceAdvisor;
    }

    /**
     * 配置shiro redisManager
     * 使用的是shiro-redis開源外掛
     * @return
     */
    public RedisManager redisManager() {
        RedisManager redisManager = new RedisManager();
        redisManager.setHost(host);
        redisManager.setPort(port);
        redisManager.setExpire(1800);// 配置快取過期時間
        redisManager.setTimeout(timeout);
        // redisManager.setPassword(password);
        return redisManager;
    }

    /**
     * cacheManager 快取 redis實現
     * 使用的是shiro-redis開源外掛
     * @return
     */
    public RedisCacheManager cacheManager() {
        RedisCacheManager redisCacheManager = new RedisCacheManager();
        redisCacheManager.setRedisManager(redisManager());
        return redisCacheManager;
    }


    /**
     * RedisSessionDAO shiro sessionDao層的實現 通過redis
     * 使用的是shiro-redis開源外掛
     */
    @Bean
    public RedisSessionDAO redisSessionDAO() {
        RedisSessionDAO redisSessionDAO = new RedisSessionDAO();
        redisSessionDAO.setRedisManager(redisManager());
        return redisSessionDAO;
    }

    /**
     * shiro session的管理
     */
    @Bean
    public DefaultWebSessionManager sessionManager() {
        DefaultWebSessionManager sessionManager = new DefaultWebSessionManager();
        sessionManager.setSessionDAO(redisSessionDAO());
        return sessionManager;
    }

}
但是有幾個注意點 : 1.hashedCredentialsMatcher 這裡面配置了密碼儲存匹配機制,如例子中是用MD5加密,而且是兩次,這個時候你在DB中儲存的密碼也應該是MD5機密兩次後的密碼

相關推薦

Spring boot整合Mybatis Redis Shiro

/** * Created by yangqj on 2017/4/23. */ @Configuration public class ShiroConfig { @Autowired(required = false) private ResourcesService resource

Spring Boot 整合mybatisRedis做二級快取

一:整合druid資料來源 一:導包 <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artif

spring boot 整合 mybatis 使用redis做二級快取

1引入(mybatis和redis) <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter&l

spring boot整合mybatis深坑之c3p0的詳細配置

text context ati reat source ast type fig oot 項目地址:https://gitee.com/zhangjunqing/spring-boot/tree/master/springboot-mybatis-notice 本人在c3

spring boot 整合mybatis

參考 plugins odin system stack name incr xmlns xsd 參考: http://blog.csdn.net/saytime/article/details/74783296 spring boot可以使用全註解的方式進行開發,極大的提

spring boot整合mybatis+mybatis-plus

可靠 nic false system ttr .post 代碼生成 -i filters Spring boot對於我來說是一個剛接觸的新東西,學習過程中,發現這東西還是很容易上手的,Spring boot沒配置時會默認使用Spring data jpa,這東西可以說一個

企業分布式微服務雲SpringCloud SpringBoot mybatis (十三)Spring Boot整合MyBatis

ech 字段 osc 操作 with public assert 連接 ref Spring中整合MyBatis就不多說了,最近大量使用Spring Boot,因此整理一下Spring Boot中整合MyBatis的步驟。搜了一下Spring Boot整合MyBatis的文

Spring Boot整合MyBatis學習總結

Spring Boot MyBatis druid數據源 druid sql監控 公司的很多項目都陸陸續續引入了Spring Boot,通過對Spring Boot的接觸了解發現其真的是大大地簡化了開發、簡化了依賴配置,很多功能註解一下就可以實現,真的是太方便了。下面記錄了一個Sp

spring boot整合mybatis

tis ott 最簡 boot.s driver 大連 ins pla configure spring boot本來可以使用jpa進行數據庫操作,但是考慮到jpa的資料比較少,學習成本比較大,不是所有的人都可以十分了解,因此考慮采用mybatis來進行數據庫操作。 1、新

SpringBoot自學教程 | 第四篇:Spring Boot整合mybatis

整合 com 字段 apach param pack image ice rac   引入依賴   1:在pom文件引入mybatis-spring-boot-starter的依賴: 1 <dependency> 2 <groupId>

spring boot 整合mybatis:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):

pri ssp path 內容 方案 sta 問題 xmapp not 最近在學習SpringBoot,遇到些異常情況: 1、異常信息 org.apache.ibatis.binding.BindingException: Invalid bound statement (

spring boot 整合mybatis(好用!!!!)

com true pla 12px 保密 center 性別 request context springboot整合mybatis 1.pom依賴 <!-- 引入freeMarker的依賴包. --> <dependency>

Spring Boot】(23)、Spring Boot整合Mybatis

首先新增mybatis依賴: <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</

Spring Boot整合MyBatis實戰

一 新建pom <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId&g

Spring boot 整合MyBatis(1)

一、Spring boot整合MyBatis Mybatis提供了mybatis-spring-boot-starter 目前 1.3.x 是最新版 https://github.com/mybatis/spring-boot-startergit下載地址

Spring Boot 整合 MyBatis(四)

Spring Boot 整合 MyBatis A、ORM框架是什麼? 物件關係對映(Object Relational Mapping,簡稱 ORM)模式是一種為了解決面向物件與關係資料庫存在的 互不匹配的現象技術。簡單的說,ORM 是通過使用描述物件

Spring-boot整合Mybatis踩坑:不能找到@MapperScan標籤

       開發工具:Ideal        使用場景:Demo 問題描述:        Spring

spring boot整合mybatis基於註解開發以及動態sql的使用

  讓我們回憶一下上篇部落格中mybatis是怎樣發揮它的作用的,主要是三類檔案,第一mapper介面,第二xml檔案,第三全域性配置檔案(application.properties),而今天我們就是來簡化mybatis的工作的——利用註解替代xml配置檔案。   先貼出mapper介面程式碼 @

Spring Boot 整合Mybatis非starter時,mapper一直無法注入解決

本來呢,直接使用mybatis-spring-boot-starter還是挺好的,但是我們系統比較複雜,有多個數據源,其中一個平臺自己的資料來源,另外一些是動態配置出來的,兩者完全沒有關係。所以直接使用mybatis-spring-boot-starter就很麻煩了,會報下列錯誤: Caused by

spring-boot整合mybatis-generator

通用Mapper在1.0.0版本的時候增加了MyBatis Generator(以下簡稱MBG)外掛,使用該外掛可以很方便的生成實體類、Mapper介面以及對應的XML檔案。 下面介紹了mybatis-generator在spring-boot中的使用過程 專案依賴 pom.xml 我使