spring boot 集成shiro的配置方法

网友投稿 367 2023-03-01


spring boot 集成shiro的配置方法

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

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

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

org.apache.shiro

shiro-core

${shiro.version}

org.apache.shiro

shiro-web

${shiro.version}

org.apache.shiro

shiro-spring

${shiro.version}

org.apache.shiro

shiro-ehcache

${shiro.version}

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

xmlns:xsi="http://w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://springframework.org/schema/beans http://springframework.org/schema/beans/spring-beans.xsd"

default-lazy-init="true">

Shiro安全配置 来源于: http://shiro.apache.org/spring.html

/sa/** = authc

/** = anon

class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"

depends-on="lifecycleBeahttp://nPostProcessor">

class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">

xmlns:xsi="http://w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://springframework.org/schema/beans http://springframework.org/schema/beans/spring-beans.xsd"

default-lazy-init="true">

Shiro安全配置 来源于: http://shiro.apache.org/spring.html

/sa/** = authc

/** = anon

class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"

depends-on="lifecycleBeahttp://nPostProcessor">

class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"

depends-on="lifecycleBeahttp://nPostProcessor">

class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">

class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">

好多类啊,没办法一个一个配置,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 filterChainDefinitionMap = new LinkedHashMap();

@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

maxElementsInMemory="10000"

eternal="false"

timeToIdleSeconds="120"

timeToLiveSeconds="120"

overflowToDisk="false"

diskPersistent="false"

diskExpiryThreadIntervalSeconds="120"

/>

备注:ShiroRealmImpl类请参考官方文档

总结

以上所述是给大家介绍的spring boot 集成shiro的配置方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,会及时回复大家的。在此也非常感谢大家对我们网站的支持!

maxElementsInMemory="10000"

eternal="false"

timeToIdleSeconds="120"

timeToLiveSeconds="120"

overflowToDisk="false"

diskPersistent="false"

diskExpiryThreadIntervalSeconds="120"

/>

备注:ShiroRealmImpl类请参考官方文档

总结

以上所述是给大家介绍的spring boot 集成shiro的配置方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,会及时回复大家的。在此也非常感谢大家对我们网站的支持!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:java根据List内对象的属性排序方法
下一篇:详解JVM类加载机制及类缓存问题的处理方法
相关文章

 发表评论

暂时没有评论,来抢沙发吧~