package 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**是将流行的Java Web框架Spring Boot与安全管理框架Apache Shiro结合,以构建高效、安全的Web应用程序。Spring Boot以其简洁的配置和快速的开发体验深受开发者喜爱,而Shiro则提供了全面的...
2. 配置Shiro:创建一个名为`ShiroConfig.java`的配置类,配置Shiro Realm、过滤器链等: ```java @Configuration public class ShiroConfig { // 实现Realm,配置用户和权限 @Bean public MyRealm myRealm() { ...
接下来,我们可以在SpringBoot启动类中配置Shiro Filter,设置过滤器链,以实现URL级别的权限控制。Shiro Filter支持多种过滤器,如 anon(匿名访问)、authc(身份验证)、roles(角色权限)和perms(权限许可)等...
《构建基于SpringBoot、SpringDataJPA、Thymeleaf和Shiro的高效管理平台框架》 在现代Web开发中,高效、稳定的管理平台框架是不可或缺的。本框架结合了SpringBoot、SpringDataJPA、Thymeleaf和Shiro等技术,构建了...
- 配置Shiro:创建一个自定义的Shiro配置类,配置Realm以连接数据库进行身份验证和授权。 - 配置Web安全:定义Shiro的Web过滤器,并在SpringBoot的`WebSecurityConfig`类中添加Shiro的过滤链。 - 创建 Realm:...
SpringBoot与Shiro的结合为开发者提供了一个高效、便捷的实现前后端全分离接口安全的框架。本文将深入探讨如何利用这两个强大的工具构建安全的Web服务。 首先,SpringBoot是Spring框架的一个轻量级版本,它简化了...
SpringBoot集成Shiro实现动态URI权限是一个常见的权限管理实践,主要目的是为了实现更灵活、更安全的用户访问控制。在Web应用中,权限控制通常包括角色管理、菜单管理、操作权限(URI)管理等,而动态URI权限则允许...
在本项目中,"SpringBoot+Mybatis+Mybatis Plus+Shiro实现一个简单的项目架构",开发者构建了一个基于Java的轻量级Web应用框架,旨在简化开发流程并强化安全控制。以下是该项目涉及的主要技术点及其详细说明: 1. *...
2. 配置Shiro:创建Shiro配置类,配置安全过滤器链,实现认证和授权逻辑。 3. 配置MyBatis:配置MyBatis的SqlSessionFactory,提供Mapper接口的扫描路径。 4. 集成Shiro和SpringBoot:通过`@EnableWebSecurity`和`@...
本资料包“利用Spring Boot的自动化配置特性来实现快速的将Shiro集成到SpringBoot应用中.zip”聚焦于如何将安全框架Shiro与Spring Boot无缝融合,从而提升企业级应用的安全性。 Shiro是Apache组织提供的一款轻量级...
6. **会话管理**:在Shiro配置类中,配置SessionManager的sessionDAO为RedisSessionDAO,并设置sessionValidationSchedulerEnabled为true,启用定期校验session的有效性。 7. **测试验证**:创建测试接口,模拟用户...
4. 集成Redis:配置Redis的连接池,设置Session的Redis序列化方式,并在Shiro配置中指定使用RedisSessionDAO。 5. 配置MyBatisPlus:设置数据库连接信息,创建Mapper接口和Mapper XML文件,编写Service和Controller...
SpringBoot 2.0 整合 Apache Shiro 是一个常见的安全框架集成,它为Web应用程序提供了用户认证和授权的功能。SpringBoot的优雅简洁与Shiro的强大安全特性相结合,可以简化开发过程,使得权限管理变得更加高效和便捷...
Apache Shiro 是一个强大且易用的 Java 安全框架,提供身份认证、授权、加密和会话管理功能,简化了企业级应用的安全实施。在本项目 "shiro-springboot.zip" 中,我们将探讨如何将 Shiro 集成到 Spring Boot 应用中...
5. **启动Shiro**:通过`@EnableShiroConfig`注解启动Shiro配置,或者在SpringBoot的配置类中,手动配置Shiro的生命周期bean,如SecurityManager和FilterChainResolver。 6. **整合SpringBoot的Controller**:在...
2. 创建Shiro配置类,设置SecurityManager,配置realm,以及自定义的过滤器链。 3. 编写自定义Realm,连接到数据库,实现认证和授权逻辑。 4. 在SpringBoot的主配置类中,注册Shiro的配置类。 5. 编写Shiro相关的...
然后,在SpringBoot的配置类中,注册Shiro的`SecurityManager`和`FilterChainResolver`,并将自定义的`Realm`注入其中: ```java @Configuration public class ShiroConfig { @Bean public ...
首先,我们需要在`pom.xml`中添加Shiro的依赖,然后配置Shiro的配置类,包括 Realm(用于处理认证和授权)和过滤器链定义,以决定哪些URL需要经过Shiro的拦截。 2. **Redis集成**:为了提高性能和减轻服务器负担,...
5. **配置Filter**:在SpringBoot的主类或者配置类中,通过`@WebFilter`注解配置Shiro Filter,将Shiro的过滤器链绑定到SpringBoot的DispatcherServlet。 6. **编写Controller**:创建处理登录、登出的Controller,...