`
weiqingfei
  • 浏览: 317282 次
  • 性别: Icon_minigender_1
  • 来自: 黑洞
社区版块
存档分类
最新评论

Apache Shiro和Spring boot的结合使用

    博客分类:
  • Java
阅读更多

实际上在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();
	}
}

 

  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来拦截用以下注解的方法。老实说,这里注入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、MyBatis、Thymeleaf以及Apache Shiro这四个核心技术栈构建了一个面向学习型的后台管理系统。这个系统旨在提供一个高效、易用的平台,帮助用户进行学习资源的管理和分享。接下来,...

    Spring Boot+Apache Shiro+Spring MVC+MyBatis+Quartz+Druid DEMO

    这是一个基于Spring Boot、Apache Shiro、Spring MVC、MyBatis、Quartz和Druid的数据源管理框架的示例项目,名为"renren-security"。这个DEMO提供了完整的权限管理和任务调度解决方案,下面是这些技术栈的核心知识点...

    spring_boot_shiro

    在实际项目中,结合Spring Boot的自动配置和Shiro的安全特性,可以极大地简化安全相关的开发工作,让开发者更专注于业务逻辑。在实际操作中,需要根据具体需求调整配置和代码,以满足不同场景下的安全需求。

    Spring Boot+Maven+Spring Data JPA+apache Shiro+Easyui实现通用用户权限管理系统

    本项目基于"Spring Boot+Maven+Spring Data JPA+apache Shiro+Easyui",这些技术栈的选择旨在简化开发过程,提供强大的功能,并确保系统的安全性和用户体验。 1. **Spring Boot**: Spring Boot是Spring框架的简化版...

    spring boot 集成 shiro

    而 Apache Shiro 是一个强大且易用的 Java 安全框架,提供了认证、授权、加密和会话管理功能,可以非常方便地与 Spring Boot 结合使用,为我们的应用程序提供安全控制。 在 Spring Boot 中集成 Shiro,主要涉及以下...

    SpringBoot+MyBatis+Apache Shiro+Bootstrap+Thymeleaf可用于开发企业级应用系统

    本系统(基于SpringBoot+MyBatis+Apache Shiro+Bootstrap+Thymeleaf) 可用于开发所有企业级WEB应用系统(如:各种后台管理系统、CRM、ERP、CMS、OA、博客、论坛等...)。响应式布局,支持大部分浏览器(如:IE9+...

    39.1 Spring Boot Shiro权限管理【从零开始学Spring Boot】

    在本教程中,我们将深入探讨如何使用Spring Boot与Apache Shiro进行权限管理。Spring Boot以其简洁的配置和快速的应用开发而闻名,而Shiro则是一个轻量级的安全框架,适用于身份验证、授权、会话管理和安全性相关的...

    springboot shiro 权限管理 spring boot

    Spring Boot 和 Apache Shiro 是两个在Java开发领域中广泛使用的框架,它们分别专注于应用程序的快速启动与配置以及安全权限管理。本项目结合了这两个强大的工具,提供了一个完整的权限管理系统实例,帮助开发者快速...

    spring-boot-shiro:Apache Shiro与Spring Boot的集成

    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 &lt; groupId&gt;...

    Spring boot shiro

    Spring Boot 和 Apache Shiro 是两个在Java开发中广泛使用的框架。Spring Boot 提供了快速构建和配置Spring应用的便利性,而Shiro则是一个强大且易用的安全管理框架,专注于身份验证、授权、会话管理和安全性。 **...

    基于Spring Boot和Apache Shiro的企业门户前后端系统设计源码

    本源码提供了一个基于Spring Boot和Apache Shiro的企业门户前后端系统设计。项目包含1520个文件,其中包括452个JavaScript文件、319个PNG图片、227个HTML文件、178个Java源文件、99个JPG图片、88个CSS样式文件、24个...

    spring boot+shiro 权限认证管理案例

    Spring Boot 和 Apache Shiro 的整合是企业级应用中常见的权限认证和安全管理方案。Spring Boot 提供了简化 Java 应用程序开发的框架,而 Shiro 是一个轻量级的安全框架,专注于身份验证、授权、会话管理和加密。...

    (源码)基于Spring Boot和Apache Shiro的权限管理系统.zip

    # 基于Spring Boot和Apache Shiro的权限管理系统 ## 项目简介 本项目是一个基于Spring Boot和Apache Shiro框架的权限管理系统,旨在提供一个分布式、高灵活性、可扩展的权限管理解决方案。系统支持RBAC(基于角色...

    Spring Boot与Shiro实现权限管理

    Spring Boot和Apache Shiro的结合为开发人员提供了一个便捷的权限管理解决方案。通过Spring Boot的自动化配置和Shiro的灵活安全模型,可以快速搭建起认证和授权系统。理解并熟练掌握这两者之间的集成,对于构建健壮...

    Spring Boot整合Shiro搭建权限管理系统

    在本文中,我们将探讨如何利用Spring Boot和Apache Shiro构建一个权限管理系统。Spring Boot以其便捷的启动和配置方式,使得快速开发变得简单。而Shiro则是一个轻量级的安全框架,用于实现用户认证和授权。 首先,...

    spring boot+shiro

    Spring Boot和Shiro是两个在Java开发中广泛使用的框架,它们在构建权限管理系统中发挥着重要作用。Spring Boot简化了Spring应用程序的配置和启动过程,而Apache Shiro则是一个强大且易用的安全框架,用于处理认证、...

    基于Spring Boot的Apache Shiro用户管理和权限控制设计源码

    该项目为基于Spring Boot框架整合Apache Shiro实现的用户管理和权限控制系统源码,包含654个文件,涵盖387个JavaScript文件、91个PNG图像文件、36个GIF动画文件、34个CSS样式文件、27个Java源文件、15个JPG图像文件...

    springboot-shiro

    在前端页面,我们可以使用Thymeleaf等模板引擎,结合Shiro的标签库,动态展示用户权限控制的界面。例如,根据用户的角色和权限,决定按钮是否显示、链接是否可点击等。 总之,结合SpringBoot的便捷性和Shiro的强大...

    spring boot+shiro+mybatis实现不同用户登录显示不同的权限菜单

    Spring Boot、Shiro和MyBatis这三大框架的组合提供了一种高效且灵活的方式来实现这一目标。本项目通过集成这三个工具,能够根据用户的登录身份展示不同的权限菜单,确保了用户只能访问他们被授权的功能。 **Spring ...

    详解Spring Boot 集成Shiro和CAS

    本文将详细介绍 Spring Boot 集成 Shiro 和 CAS 的知识点,帮助读者了解 Shiro 和 CAS 的概念、使用方法,以及它们在 Spring Boot 中的集成方式。 Shiro 介绍 Shiro 是一个开源的 Java 安全框架,由 Apache 软件...

Global site tag (gtag.js) - Google Analytics