实际上在Spring boot里用Spring Security最合适,毕竟是自家东西,最重要的一点是Spring Security里自带有csrf filter,防止csrf攻击,shiro里就没有。
但是Spring Security有点太复杂,custmize起来比较费力,不如shiro来的简单。
如果想要在Spring boot里使用shiro,需要进行以下配置,首先pom.xml里要添加shiro的依赖。
<dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring</artifactId> <version>1.2.5</version> </dependency> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-ehcache</artifactId> <version>1.2.5</version> </dependency> <dependency> <groupId>com.github.theborakompanioni</groupId> <artifactId>thymeleaf-extras-shiro</artifactId> <version>1.2.1</version> </dependency>
shiro官方只提供了jsp的标签,没有提供thymeleaf的,而thymeleaf在spring boot里应用已经很广泛了,这里依赖了一个第三方包。
然后就是shiro的配置文件,这里我们使用java-based 配置
@Configuration public class ShiroConfiguration { @Bean(name = "lifecycleBeanPostProcessor") public LifecycleBeanPostProcessor lifecycleBeanPostProcessor() { return new LifecycleBeanPostProcessor(); } @Bean(name = "hashedCredentialsMatcher") public HashedCredentialsMatcher hashedCredentialsMatcher() { HashedCredentialsMatcher credentialsMatcher = new HashedCredentialsMatcher(); credentialsMatcher.setHashAlgorithmName("MD5"); credentialsMatcher.setHashIterations(2); credentialsMatcher.setStoredCredentialsHexEncoded(true); return credentialsMatcher; } @Bean(name = "shiroRealm") @DependsOn("lifecycleBeanPostProcessor") public ShiroRealm shiroRealm() { ShiroRealm realm = new ShiroRealm(); realm.setCredentialsMatcher(hashedCredentialsMatcher()); return realm; } @Bean(name = "ehCacheManager") @DependsOn("lifecycleBeanPostProcessor") public EhCacheManager ehCacheManager(){ EhCacheManager ehCacheManager = new EhCacheManager(); return ehCacheManager; } @Bean(name = "securityManager") public SecurityManager securityManager(){ DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(); securityManager.setRealm(shiroRealm()); securityManager.setCacheManager(ehCacheManager()); return securityManager; } @Bean(name = "shiroFilter") public ShiroFilterFactoryBean shiroFilterFactoryBean(){ ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean(); shiroFilterFactoryBean.setSecurityManager(securityManager()); Map<String, Filter> filters = new LinkedHashMap<String, Filter>(); LogoutFilter logoutFilter = new LogoutFilter(); logoutFilter.setRedirectUrl("/login"); filters.put("logout", logoutFilter); shiroFilterFactoryBean.setFilters(filters); Map<String, String> filterChainDefinitionManager = new LinkedHashMap<String, String>(); filterChainDefinitionManager.put("/logout", "logout"); filterChainDefinitionManager.put("/user/**", "authc,roles[user]"); filterChainDefinitionManager.put("/shop/**", "authc,roles[shop]"); filterChainDefinitionManager.put("/admin/**", "authc,roles[admin]"); filterChainDefinitionManager.put("/**", "anon"); shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionManager); shiroFilterFactoryBean.setLoginUrl("/login"); shiroFilterFactoryBean.setSuccessUrl("/"); shiroFilterFactoryBean.setUnauthorizedUrl("/403"); return shiroFilterFactoryBean; } @Bean @ConditionalOnMissingBean public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator() { DefaultAdvisorAutoProxyCreator daap = new DefaultAdvisorAutoProxyCreator(); daap.setProxyTargetClass(true); return daap; } @Bean public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor() { AuthorizationAttributeSourceAdvisor aasa = new AuthorizationAttributeSourceAdvisor(); aasa.setSecurityManager(securityManager()); return aasa; } @Bean(name = "shiroDialect") public ShiroDialect shiroDialect(){ return new ShiroDialect(); } }
- LifecycleBeanPostProcessor,这是个DestructionAwareBeanPostProcessor的子类,负责org.apache.shiro.util.Initializable类型bean的生命周期的,初始化和销毁。主要是AuthorizingRealm类的子类,以及EhCacheManager类。
- HashedCredentialsMatcher,这个类是为了对密码进行编码的,防止密码在数据库里明码保存,当然在登陆认证的生活,这个类也负责对form里输入的密码进行编码。
- ShiroRealm,这是个自定义的认证类,继承自AuthorizingRealm,负责用户的认证和权限的处理,可以参考JdbcRealm的实现。
- EhCacheManager,缓存管理,用户登陆成功后,把用户信息和权限信息缓存起来,然后每次用户请求时,放入用户的session中,如果不设置这个bean,每个请求都会查询一次数据库。
- SecurityManager,权限管理,这个类组合了登陆,登出,权限,session的处理,是个比较重要的类。
- ShiroFilterFactoryBean,是个factorybean,为了生成ShiroFilter。它主要保持了三项数据,securityManager,filters,filterChainDefinitionManager。
- DefaultAdvisorAutoProxyCreator,Spring的一个bean,由Advisor决定对哪些类的方法进行AOP代理。
- AuthorizationAttributeSourceAdvisor,shiro里实现的Advisor类,内部使用AopAllianceAnnotationsAuthorizingMethodInterceptor来拦截用以下注解的方法。老实说,这里注入securityManager,我不知道有啥用,从source上看不出它在什么地方会被调用。
private static final Class<? extends Annotation>[] AUTHZ_ANNOTATION_CLASSES = new Class[] { RequiresPermissions.class, RequiresRoles.class, RequiresUser.class, RequiresGuest.class, RequiresAuthentication.class };
9.ShiroDialect,为了在thymeleaf里使用shiro的标签的bean
相关推荐
在本项目中,我们利用Spring Boot、MyBatis、Thymeleaf以及Apache Shiro这四个核心技术栈构建了一个面向学习型的后台管理系统。这个系统旨在提供一个高效、易用的平台,帮助用户进行学习资源的管理和分享。接下来,...
这是一个基于Spring Boot、Apache Shiro、Spring MVC、MyBatis、Quartz和Druid的数据源管理框架的示例项目,名为"renren-security"。这个DEMO提供了完整的权限管理和任务调度解决方案,下面是这些技术栈的核心知识点...
在实际项目中,结合Spring Boot的自动配置和Shiro的安全特性,可以极大地简化安全相关的开发工作,让开发者更专注于业务逻辑。在实际操作中,需要根据具体需求调整配置和代码,以满足不同场景下的安全需求。
本项目基于"Spring Boot+Maven+Spring Data JPA+apache Shiro+Easyui",这些技术栈的选择旨在简化开发过程,提供强大的功能,并确保系统的安全性和用户体验。 1. **Spring Boot**: Spring Boot是Spring框架的简化版...
而 Apache Shiro 是一个强大且易用的 Java 安全框架,提供了认证、授权、加密和会话管理功能,可以非常方便地与 Spring Boot 结合使用,为我们的应用程序提供安全控制。 在 Spring Boot 中集成 Shiro,主要涉及以下...
本系统(基于SpringBoot+MyBatis+Apache Shiro+Bootstrap+Thymeleaf) 可用于开发所有企业级WEB应用系统(如:各种后台管理系统、CRM、ERP、CMS、OA、博客、论坛等...)。响应式布局,支持大部分浏览器(如:IE9+...
在本教程中,我们将深入探讨如何使用Spring Boot与Apache Shiro进行权限管理。Spring Boot以其简洁的配置和快速的应用开发而闻名,而Shiro则是一个轻量级的安全框架,适用于身份验证、授权、会话管理和安全性相关的...
Spring Boot 和 Apache Shiro 是两个在Java开发领域中广泛使用的框架,它们分别专注于应用程序的快速启动与配置以及安全权限管理。本项目结合了这两个强大的工具,提供了一个完整的权限管理系统实例,帮助开发者快速...
Apache Shiro与Spring Boot集成 GitHub: : 用法 首先安装到本地仓库。 双向v2.0下为2.0.0版本,主要将Spring Boot升级到2.0.4.RELEASE,Shiro升级到1.4.0 mvn clean install pom.xml < groupId>...
Spring Boot 和 Apache Shiro 是两个在Java开发中广泛使用的框架。Spring Boot 提供了快速构建和配置Spring应用的便利性,而Shiro则是一个强大且易用的安全管理框架,专注于身份验证、授权、会话管理和安全性。 **...
本源码提供了一个基于Spring Boot和Apache Shiro的企业门户前后端系统设计。项目包含1520个文件,其中包括452个JavaScript文件、319个PNG图片、227个HTML文件、178个Java源文件、99个JPG图片、88个CSS样式文件、24个...
Spring Boot 和 Apache Shiro 的整合是企业级应用中常见的权限认证和安全管理方案。Spring Boot 提供了简化 Java 应用程序开发的框架,而 Shiro 是一个轻量级的安全框架,专注于身份验证、授权、会话管理和加密。...
# 基于Spring Boot和Apache Shiro的权限管理系统 ## 项目简介 本项目是一个基于Spring Boot和Apache Shiro框架的权限管理系统,旨在提供一个分布式、高灵活性、可扩展的权限管理解决方案。系统支持RBAC(基于角色...
Spring Boot和Apache Shiro的结合为开发人员提供了一个便捷的权限管理解决方案。通过Spring Boot的自动化配置和Shiro的灵活安全模型,可以快速搭建起认证和授权系统。理解并熟练掌握这两者之间的集成,对于构建健壮...
在本文中,我们将探讨如何利用Spring Boot和Apache Shiro构建一个权限管理系统。Spring Boot以其便捷的启动和配置方式,使得快速开发变得简单。而Shiro则是一个轻量级的安全框架,用于实现用户认证和授权。 首先,...
Spring Boot和Shiro是两个在Java开发中广泛使用的框架,它们在构建权限管理系统中发挥着重要作用。Spring Boot简化了Spring应用程序的配置和启动过程,而Apache Shiro则是一个强大且易用的安全框架,用于处理认证、...
该项目为基于Spring Boot框架整合Apache Shiro实现的用户管理和权限控制系统源码,包含654个文件,涵盖387个JavaScript文件、91个PNG图像文件、36个GIF动画文件、34个CSS样式文件、27个Java源文件、15个JPG图像文件...
在前端页面,我们可以使用Thymeleaf等模板引擎,结合Shiro的标签库,动态展示用户权限控制的界面。例如,根据用户的角色和权限,决定按钮是否显示、链接是否可点击等。 总之,结合SpringBoot的便捷性和Shiro的强大...
Spring Boot、Shiro和MyBatis这三大框架的组合提供了一种高效且灵活的方式来实现这一目标。本项目通过集成这三个工具,能够根据用户的登录身份展示不同的权限菜单,确保了用户只能访问他们被授权的功能。 **Spring ...
本文将详细介绍 Spring Boot 集成 Shiro 和 CAS 的知识点,帮助读者了解 Shiro 和 CAS 的概念、使用方法,以及它们在 Spring Boot 中的集成方式。 Shiro 介绍 Shiro 是一个开源的 Java 安全框架,由 Apache 软件...