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

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来拦截用以下注解的方法。
	 */

}
 

 

分享到:
评论

相关推荐

    SpringBoot 集成 Shiro 实现动态uri权限

    1. **配置Shiro**: 在SpringBoot项目中引入Shiro依赖,并配置Shiro的Realm,用于处理认证和授权。 Realm是Shiro与应用程序的特定安全存储(如数据库)的桥梁。 2. **定义权限模型**: 设计权限、角色和用户的模型,...

    springboot+shiro+redis整合

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

    SpringBoot 、Shiro、 自定义注解权限控制源码下载

    3. **Shiro的集成**:研究如何在SpringBoot应用中配置Shiro,包括安全配置、 Realm(认证和授权信息提供者)的实现以及自定义注解的编写和使用。 4. **Shiro的权限控制**:掌握如何使用Shiro的注解进行权限判断,如@...

    springboot整合shiro

    接下来,我们需要配置Shiro的配置类,创建一个名为`ShiroConfig`的类,并实现相关配置: ```java @Configuration public class ShiroConfig { @Bean public DefaultWebSecurityManager securityManager() { // ...

    SpringBoot + Shiro实现前后端全分离接口安全框架

    1. **配置Shiro**:在SpringBoot应用中引入Shiro依赖,然后配置Shiro Realm,实现用户认证和授权逻辑。Realm是Shiro与应用中的用户数据源交互的接口,你可以自定义 Realm 类以连接数据库或其他用户存储。 2. **编写...

    springboot shiro后台管理系统

    2. 创建Shiro配置:在SpringBoot的配置类中,我们需要定义Shiro的相关配置,包括 Realm(权限认证)的设置,过滤器链的配置等。 3. 自定义Realm: Realm是Shiro与应用数据源交互的桥梁,需要实现AuthenticationInfo...

    springboot-shiro

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

    SpringBoot集成Shiro、Jwt和Redis

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

    springboot shiro 权限管理项目

    总结来说,"springboot shiro 权限管理项目"是一个利用Spring Boot的便利性和Shiro的安全特性,构建的具备用户认证、权限控制和会话管理功能的后台系统。开发者可以通过学习和使用这个项目,快速掌握如何在Spring ...

    springboot+shiro.zip

    2. 创建Shiro配置类,设置SecurityManager,配置realm,以及自定义的过滤器链。 3. 编写自定义Realm,连接到数据库,实现认证和授权逻辑。 4. 在SpringBoot的主配置类中,注册Shiro的配置类。 5. 编写Shiro相关的...

    SpringBoot Shiro配置自定义密码加密器代码实例

    在本篇文章中,我们将详细介绍如何在 SpringBoot 项目中配置自定义密码加密器代码实例,使用 Shiro 框架来实现身份认证和授权管理。Shiro 框架提供了一个灵活的安全管理系统,可以满足各种应用场景的需求。 Shiro ...

    Springboot+shiro权限管理

    5. **会话管理**:Shiro 还可以管理用户会话,包括会话超时、会话同步等,如果需要,可以通过Shiro配置实现会话的持久化存储。 6. **启动Shiro**:在Spring Boot的主类或配置类中,通过`@EnableWebSecurity`和`@...

    Springboot开发:Springboot shiro权限管理,流程最详细、代码最干净、配置最简单的shiro上手项目

    此外,还需要编写一个Shiro配置类,继承自`WebSecurityConfigurerAdapter`,重写其方法来配置Shiro的FilterChainDefinitionSource,以及自定义的Realm。 认证流程主要包括以下步骤: 1. 用户提交用户名和密码。 2. ...

    SpringBoot + Shiro,单WEB项目的简单权限案例

    3. **编写Shiro配置类**:创建一个Java配置类,继承自`WebSecurityConfigurerAdapter`,并覆盖其方法来定制Shiro的配置。在这里,我们可以定义哪些URL需要被保护,以及相应的访问规则。 4. **实现Realm**: Realm是...

    springboot shiro基于redis分布式权限实现完整案例代码

    - Shiro配置类:如`ShiroConfig.java` - Redis配置类:如`RedisConfig.java` - Spring Boot主类:如`Application.java` 通过深入研究这些代码,我们可以了解Shiro如何与Spring Boot和Redis协同工作,实现权限的...

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

    2. **配置Shiro**:创建一个`shiro.ini`配置文件,或者在SpringBoot中使用Java配置类。在这里,可以定义安全策略、 Realm(域)以及其他Shiro组件。 3. **自定义Realm**: Realm是Shiro与应用程序数据源交互的接口...

    SpringBoot+Shiro+Jpa+Redis.zip

    3. `SecurityConfig.java` - Shiro的配置类,用于设置安全策略,如过滤器链、 Realm配置等。 4. `UserServiceImpl.java` - 用户服务接口的实现,利用Jpa进行用户数据的增删改查。 5. `SessionDAO.java` - 自定义的...

    SpringBoot + shiro Demo 简单登录验证权限验证

    1. 配置文件(如application.properties或yaml),用于配置SpringBoot和Shiro的相关设置。 2. 自定义Realm类,Shiro通过Realm进行身份认证和授权,这里的Realm可能是根据项目需求定制的,处理数据库连接和查询。 3. ...

Global site tag (gtag.js) - Google Analytics