`
zhoumeng87
  • 浏览: 71592 次
文章分类
社区版块
存档分类
最新评论

springboot 整合 Shiro 配置类

 
阅读更多
ckage org.fh.config;
 
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.fh.realm.MyShiroRealm;
import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;
 
import net.sf.ehcache.CacheManager;
 
import java.util.LinkedHashMap;
import java.util.Map;
 
/**
 * 说明:Shiro 配置
 * 作者:FH Admin
 * from:fhadmin.cn
 */
@Configuration
@EnableTransactionManagement
public class ShiroConfiguration {
 
	/**
	 * ShiroFilterFactoryBean 处理拦截资源文件问题
	 * 注意:单独一个ShiroFilterFactoryBean配置是或报错的,因为在
	 * 初始化ShiroFilterFactoryBean的时候需要注入:SecurityManager
	 * 
	 * Filter Chain定义说明 
	 * 1、一个URL可以配置多个Filter,使用逗号分隔
	 * 2、当设置多个过滤器时,全部验证通过,才视为通过
	 * 3、部分过滤器可指定参数,如perms,roles
	 */
	
	@Bean(name = "shiroFilter")
	public ShiroFilterFactoryBean shiroFilterFactoryBean(DefaultWebSecurityManager securityManager) {
		ShiroFilterFactoryBean factoryBean = new MyShiroFilterFactoryBean();
		factoryBean.setSecurityManager(securityManager);
		factoryBean.setLoginUrl("/");					// 如果不设置默认会自动寻找Web工程根目录下的"/login.jsp"页面
		factoryBean.setSuccessUrl("/main/index");		// 登录成功后要跳转的连接
		factoryBean.setUnauthorizedUrl("/");
		loadShiroFilterChain(factoryBean);
		return factoryBean;
	}
	
	/**
	 * 加载ShiroFilter权限控制规则
	 */
	private void loadShiroFilterChain(ShiroFilterFactoryBean factoryBean) {
		/** 下面这些规则配置最好配置到配置文件中 */
		Map<String, String> filterChainMap = new LinkedHashMap<String, String>();
		/**
		 * authc:该过滤器下的页面必须验证后才能访问,它是Shiro内置的一个拦截器 org.apache.shiro.web.filter.authc.FormAuthenticationFilter
		 * anon:它对应的过滤器里面是空的,什么都没做,可以理解为不拦截
		 * authc:所有url都必须认证通过才可以访问; anon:所有url都都可以匿名访问
		*/
		filterChainMap.put("/404/**", "anon");
		filterChainMap.put("/assets/**", "anon");
		filterChainMap.put("/admin/check", "anon");
		filterChainMap.put("/admin/islogin", "anon");
		filterChainMap.put("/admin/register", "anon");
		filterChainMap.put("/textextraction/add", "anon");
		filterChainMap.put("/**", "authc");
		factoryBean.setFilterChainDefinitionMap(filterChainMap);
	}
	
	@Bean
    public EhCacheManager ehCacheManager(CacheManager cacheManager) {
        EhCacheManager em = new EhCacheManager();
        em.setCacheManager(cacheManager);
        return em;
    }
 
	@Bean(name = "myShiroRealm")
	public MyShiroRealm myShiroRealm(EhCacheManager ehCacheManager) {
		MyShiroRealm realm = new MyShiroRealm();
		realm.setCacheManager(ehCacheManager);
		return realm;
	}
 
	@Bean(name = "lifecycleBeanPostProcessor")
	public LifecycleBeanPostProcessor lifecycleBeanPostProcessor() {
		return new LifecycleBeanPostProcessor();
	}
 
	@Bean
	public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator() {
		DefaultAdvisorAutoProxyCreator creator = new DefaultAdvisorAutoProxyCreator();
		creator.setProxyTargetClass(true);
		return creator;
	}
 
	@Bean(name = "securityManager")
	public DefaultWebSecurityManager defaultWebSecurityManager(MyShiroRealm realm,  EhCacheManager ehCacheManager) {
		DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
		securityManager.setRealm(realm);	// 设置realm
		securityManager.setCacheManager(ehCacheManager);
		return securityManager;
	}
 
	@Bean
	public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(
			DefaultWebSecurityManager securityManager) {
		AuthorizationAttributeSourceAdvisor advisor = new AuthorizationAttributeSourceAdvisor();
		advisor.setSecurityManager(securityManager);
		return advisor;
	}
 
	/*
	 * 1.LifecycleBeanPostProcessor,这是个DestructionAwareBeanPostProcessor的子类,负责org.
	 * apache.shiro.util.Initializable类型bean的生命周期的,初始化和销毁。主要是AuthorizingRealm类的子类,
	 * 以及EhCacheManager类。
	 * 2.HashedCredentialsMatcher,这个类是为了对密码进行编码的,防止密码在数据库里明码保存,当然在登陆认证的生活,
	 * 这个类也负责对form里输入的密码进行编码。
	 * 3.ShiroRealm,这是个自定义的认证类,继承自AuthorizingRealm,负责用户的认证和权限的处理,可以参考JdbcRealm的实现。
	 * 4.EhCacheManager,缓存管理,用户登陆成功后,把用户信息和权限信息缓存起来,然后每次用户请求时,放入用户的session中,
	 * 如果不设置这个bean,每个请求都会查询一次数据库。
	 * 5.SecurityManager,权限管理,这个类组合了登陆,登出,权限,session的处理,是个比较重要的类。
	 * 6.ShiroFilterFactoryBean,是个factorybean,为了生成ShiroFilter。它主要保持了三项数据,
	 * securityManager,filters,filterChainDefinitionManager。
	 * 7.DefaultAdvisorAutoProxyCreator,Spring的一个bean,由Advisor决定对哪些类的方法进行AOP代理。
	 * 8.AuthorizationAttributeSourceAdvisor,shiro里实现的Advisor类,
	 * 内部使用AopAllianceAnnotationsAuthorizingMethodInterceptor来拦截用以下注解的方法。
	 */
 
}
 

 

0
0
分享到:
评论

相关推荐

    springboot整合shiro

    **SpringBoot整合Shiro**是将流行的Java Web框架Spring Boot与安全管理框架Apache Shiro结合,以构建高效、安全的Web应用程序。Spring Boot以其简洁的配置和快速的开发体验深受开发者喜爱,而Shiro则提供了全面的...

    springboot-shiro

    接下来,我们可以在SpringBoot启动类中配置Shiro Filter,设置过滤器链,以实现URL级别的权限控制。Shiro Filter支持多种过滤器,如 anon(匿名访问)、authc(身份验证)、roles(角色权限)和perms(权限许可)等...

    springboot+shiro+redis整合

    6. **会话管理**:在Shiro配置类中,配置SessionManager的sessionDAO为RedisSessionDAO,并设置sessionValidationSchedulerEnabled为true,启用定期校验session的有效性。 7. **测试验证**:创建测试接口,模拟用户...

    SpringBoot集成Shiro、Jwt和Redis

    4. 集成Redis:配置Redis的连接池,设置Session的Redis序列化方式,并在Shiro配置中指定使用RedisSessionDAO。 5. 配置MyBatisPlus:设置数据库连接信息,创建Mapper接口和Mapper XML文件,编写Service和Controller...

    SpringBoot-Shiro整合权限管理源码

    SpringBoot整合Shiro使得权限管理变得简单易行,它提供了灵活的认证和授权机制。通过阅读和理解`springboot-shiro`的源码,开发者可以快速上手,并在实际项目中实现高效的权限管理功能。记得在实际操作中,根据项目...

    springboot整合shiro.zip

    3. **编写Shiro配置类**:在SpringBoot项目中创建一个@Configuration注解的配置类,使用@Bean注解定义Shiro的FilterChainDefinitionService、SecurityManager等核心组件。 4. **创建Shiro Realm**:Realm是Shiro与...

    SpringBoot与Shiro整合-权限管理实战源码.zip

    - **启动Shiro**:在SpringBoot的主配置类中,通过`@EnableWebMvc`注解启动Web MVC支持,然后在`WebSecurityConfig`类中配置Shiro过滤器的拦截路径。 4. **权限管理实战** - **角色与权限**:在系统设计中,通常...

    springboot整合shiro视频

    2. 配置Shiro:创建一个Shiro配置类,包括 Realm(域)配置,用于处理认证和授权;Filter配置,定义Shiro过滤器链,如anon(匿名访问)、authc(身份验证)等。 3. 自定义Realm:实现自定义的UserRealm,重写...

    springboot 集成shiro代码实例

    - 配置Shiro:编写Shiro的配置类,设置Realm(认证和授权的实现)、过滤器链等。 - 创建Realm:实现自定义的Realm,处理用户认证和授权逻辑,通常需要对接数据库进行操作。 - 编写Shiro相关组件:如`...

    springboot 与shiro安全框架的整合

    - 配置Shiro:创建一个自定义的Shiro配置类,配置Realm以连接数据库进行身份验证和授权。 - 配置Web安全:定义Shiro的Web过滤器,并在SpringBoot的`WebSecurityConfig`类中添加Shiro的过滤链。 - 创建 Realm:...

    SpringBoot整合Shiro权限框架

    SpringBoot整合Shiro权限框架是将SpringBoot与Apache Shiro这两个流行的技术栈结合,用于实现Web应用的安全控制和用户权限管理。SpringBoot以其简洁的配置和快速的开发体验深受开发者喜爱,而Shiro则是一个轻量级的...

    项目演示:springboot整合shiro.zip

    SpringBoot整合Shiro是一个常见的Java Web开发任务,用于实现用户认证和授权功能。SpringBoot以其简洁的配置和快速的启动时间受到广大开发者的喜爱,而Apache Shiro则是一个强大且易用的安全框架,能帮助开发者处理...

    SpringBoot整合shiro、redis集成mybatis

    1. **Shiro配置**:在SpringBoot项目中,我们需要引入Shiro的依赖,并创建一个Shiro配置类。配置类中会包括安全过滤器链的设置,如anon(匿名访问)、authc(身份验证)等,以及Realm的实现,用于处理用户认证和授权...

    SpringBoot整合Shiro,实现从数据库加载权限、权限的动态更新、Session共享

    **四、SpringBoot整合** 1. **启动器配置**:创建一个SpringBoot的启动器类,使用`@EnableShiroWeb`开启Shiro的Web支持。 2. **Filter配置**:配置Shiro的过滤器链,指定哪些请求应该通过哪些过滤器处理。这通常在...

    SpringBoot整合Shiro完整源码(含sql脚本).rar

    《SpringBoot整合Shiro的深度解析与实战指南》 在当今的Web开发领域,Spring Boot以其简洁、高效的特性,已经成为主流的开发框架。而Shiro作为一款轻量级的安全管理框架,提供了用户认证、授权、会话管理和安全加密...

    springboot2.0整合Shiro

    综上所述,SpringBoot 2.0 整合 Shiro 主要涉及以下几个步骤:添加Shiro依赖、配置Shiro主配置类、创建自定义Realm、处理用户、权限和角色的关系,以及使用Shiro注解进行权限控制。通过这样的集成,我们可以构建出一...

    springboot_shiro.zip

    《SpringBoot整合Shiro实战详解》 在当前的IT领域,SpringBoot因其简洁的配置、快速的开发效率以及丰富的生态支持,已经成为企业级应用开发的首选框架。而Apache Shiro作为一款强大的安全管理框架,用于处理身份...

Global site tag (gtag.js) - Google Analytics