spring boot 集成shiro的配置

spring boot提供了一个自带的认证框架,同时也提供自定义的javaconfig配置扩展,spring-sercurity同样也是优秀的框架,但是习惯了用apache shiro框架,而且原项目就是集成的shiro框架,到网上找了一下配置方式,没找到完全配置的方法,因此决定自己动手,丰衣足食!

要在spring boot上集成其他框架,首先要会spring javaconfig方法,利用此方法同样可以配置其他模块,废话少说,开始。。。

开始前需要导入maven依赖(shiro-web可选):

 <dependency>  
    <groupId>org.apache.shiro</groupId>  
    <artifactId>shiro-core</artifactId>  
    <version>${shiro.version}</version>  
</dependency>  
<dependency>  
    <groupId>org.apache.shiro</groupId>  
    <artifactId>shiro-web</artifactId>  
    <version>${shiro.version}</version>  
</dependency>  
<dependency>  
    <groupId>org.apache.shiro</groupId>  
    <artifactId>shiro-spring</artifactId>  
    <version>${shiro.version}</version>  
</dependency>  
<dependency>  
    <groupId>org.apache.shiro</groupId>  
    <artifactId>shiro-ehcache</artifactId>  
    <version>${shiro.version}</version>  
</dependency>  

原shiro集成spring的配置拿出来,如下:

<?xml version="1.0" encoding="UTF-8"?>  
<beans xmlns="http://www.springframework.org/schema/beans"  
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"  
default-lazy-init="true">  
<description>Shiro安全配置 来源于: http://shiro.apache.org/spring.html  
</description>  
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">  
<!-- Single realm app. If you have multiple realms, use the 'realms' property  
instead. -->  
<property name="realm" ref="ShiroRealmImpl" />  
<property name="cacheManager" ref="shiroEhcacheManager" />  
</bean>  
<!-- Define the realm you want to use to connect to your back-end security  
datasource: -->  
<bean id="ShiroRealmImpl" class="com.wechatserver.web.services.system.impl.ShiroRealmImpl" />  
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">  
<property name="securityManager" ref="securityManager" />  
<property name="loginUrl" value="/login" /> <!-- 没有权限或者失败后跳转的页面 -->  
<property name="successUrl" value="/sa/index" />  
<property name="filterChainDefinitions">  
<!-- , roles[admin], perms[document:read] -->  
<value>  
<!--  
/user/** = authc  
/role/edit/* = perms[role:edit]  
/role/save = perms [role:edit]  
/role/list = perms [role:view]  
-->  
/sa/** = authc  
/** = anon  
</value>  
</property>  
</bean>  
<!-- 用户授权/认证信息Cache, 采用EhCache 缓存 -->  
<bean id="shiroEhcacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager">  
<property name="cacheManagerConfigFile" value="classpath:ehcache-shiro.xml" />  
</bean>  
<!-- 保证实现了Shiro内部lifecycle函数的bean执行 -->  
<bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor" />  
<!-- AOP式方法级权限检查 -->  
<!-- Enable Shiro Annotations for Spring-configured beans. Only run after -->  
<!-- the lifecycleBeanProcessor has run: -->  
<bean  
class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"  
depends-on="lifecycleBeanPostProcessor">  
<property name="proxyTargetClass" value="true" />  
</bean>  
<bean  
class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">  
<property name="securityManager" ref="securityManager" />  
</bean>  
</beans>   

好多类啊,没办法一个一个配置,javaconfig文件如下:

import java.util.LinkedHashMap;  
import java.util.Map;  

import org.apache.shiro.cache.ehcache.EhCacheManager;  
import org.apache.shiro.spring.LifecycleBeanPostProcessor;  
import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor;  
import org.apache.shiro.spring.web.ShiroFilterFactoryBean;  
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;  
import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator;  
import org.springframework.context.annotation.Bean;  
import org.springframework.context.annotation.Configuration;  


@Configuration  
public class ShiroConfiguration {  

    private static Map<String, String> filterChainDefinitionMap = new LinkedHashMap<String, String>();  

    @Bean(name = "ShiroRealmImpl")  
    public ShiroRealmImpl getShiroRealm() {  
        return new ShiroRealmImpl();  
    }  

    @Bean(name = "shiroEhcacheManager")  
    public EhCacheManager getEhCacheManager() {  
        EhCacheManager em = new EhCacheManager();  
        em.setCacheManagerConfigFile("classpath:ehcache-shiro.xml");  
        return em;  
    }  

    @Bean(name = "lifecycleBeanPostProcessor")  
    public LifecycleBeanPostProcessor getLifecycleBeanPostProcessor() {  
        return new LifecycleBeanPostProcessor();  
    }  

    @Bean  
    public DefaultAdvisorAutoProxyCreator getDefaultAdvisorAutoProxyCreator() {  
        DefaultAdvisorAutoProxyCreator daap = new DefaultAdvisorAutoProxyCreator();  
        daap.setProxyTargetClass(true);  
        return daap;  
    }  

    @Bean(name = "securityManager")  
    public DefaultWebSecurityManager getDefaultWebSecurityManager() {  
        DefaultWebSecurityManager dwsm = new DefaultWebSecurityManager();  
        dwsm.setRealm(getShiroRealm());  
        dwsm.setCacheManager(getEhCacheManager());  
        return dwsm;  
    }  

    @Bean  
    public AuthorizationAttributeSourceAdvisor getAuthorizationAttributeSourceAdvisor() {  
        AuthorizationAttributeSourceAdvisor aasa = new AuthorizationAttributeSourceAdvisor();  
        aasa.setSecurityManager(getDefaultWebSecurityManager());  
        return new AuthorizationAttributeSourceAdvisor();  
    }  

    @Bean(name = "shiroFilter")  
    public ShiroFilterFactoryBean getShiroFilterFactoryBean() {  
        ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();  
        shiroFilterFactoryBean  
                .setSecurityManager(getDefaultWebSecurityManager());  
        shiroFilterFactoryBean.setLoginUrl("/login");  
        shiroFilterFactoryBean.setSuccessUrl("/sa/index");  
        filterChainDefinitionMap.put("/sa/**", "authc");  
        filterChainDefinitionMap.put("/**", "anon");  
        shiroFilterFactoryBean  
                .setFilterChainDefinitionMap(filterChainDefinitionMap);  
        return shiroFilterFactoryBean;  
    }  

}  

注意点:最后一个是filterChainDefinitionMap的初始化,Map用的是LinkedHashMap来初始化的,各位应用的时候将其配置成properties文件,然后初始化就ok了,改写好后直接启动Ok,搬运到spring boot应该是OK的。

别忘了在ehcache-shiro.xml:

<ehcache updateCheck="false" name="shiroCache">  

    <defaultCache  
            maxElementsInMemory="10000"  
            eternal="false"  
            timeToIdleSeconds="120"  
            timeToLiveSeconds="120"  
            overflowToDisk="false"  
            diskPersistent="false"  
            diskExpiryThreadIntervalSeconds="120"  
            />  
</ehcache>  

转载自:https://blog.csdn.net/qiuqiupeng/article/details/38984779

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值