springboot 整合 Shiro 配置类

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

 

目录
相关文章
|
22天前
|
Java Spring
Spring boot 运行服务jar外配置配置文件方式总结
Spring boot 运行服务jar外配置配置文件方式总结
134 0
|
1月前
|
Java 应用服务中间件 开发者
Java面试题:解释Spring Boot的优势及其自动配置原理
Java面试题:解释Spring Boot的优势及其自动配置原理
87 0
|
5天前
|
SQL Java 数据库连接
springboot+mybatis+shiro项目中使用shiro实现登录用户的权限验证。权限表、角色表、用户表。从不同的表中收集用户的权限、
这篇文章介绍了在Spring Boot + MyBatis + Shiro项目中,如何使用Shiro框架实现登录用户的权限验证,包括用户、角色和权限表的设计,以及通过多个表查询来收集和验证用户权限的方法和代码实现。
springboot+mybatis+shiro项目中使用shiro实现登录用户的权限验证。权限表、角色表、用户表。从不同的表中收集用户的权限、
|
5天前
|
SQL 前端开发 Java
springboot项目中使用shiro实现用户登录以及权限的验证
这篇文章详细介绍了如何在Spring Boot项目中集成Apache Shiro框架来实现用户登录和权限验证,包括项目依赖配置、数据库连接、实体类定义、控制器、服务层、Mapper层以及前端页面的实现,并展示了实际效果和过滤器代码。
springboot项目中使用shiro实现用户登录以及权限的验证
|
6天前
|
安全 前端开发 Java
Web端系统开发解决跨域问题——以Java SpringBoot框架配置Cors为例
在Web安全上下文中,源(Origin)是指一个URL的协议、域名和端口号的组合。这三个部分共同定义了资源的来源,浏览器会根据这些信息来判断两个资源是否属于同一源。例如,https://www.example.com:443和http://www.example.com虽然域名相同,但由于协议和端口号不同,它们被视为不同的源。同源(Same-Origin)是指两个URL的协议、域名和端口号完全相同。只有当这些条件都满足时,浏览器才认为这两个资源来自同一源,从而允许它们之间的交互操作。
Web端系统开发解决跨域问题——以Java SpringBoot框架配置Cors为例
|
8天前
|
缓存 前端开发 Java
"揭秘!SpringBoot携手Nginx,性能飙升秘籍大公开:轻松掌握配置优化,让你的应用快如闪电!"
【8月更文挑战第11天】随着微服务架构的发展,SpringBoot成为构建RESTful API的首选,Nginx则作为高性能的反向代理服务器提升应用性能。本文将探讨两者如何协同工作,包括Nginx的负载均衡策略、静态资源缓存及数据压缩配置;同时讨论SpringBoot的线程池优化、缓存策略及性能监控。通过这些方法,帮助开发者显著提高系统的整体性能和可用性。
19 1
|
21天前
|
监控 NoSQL Java
Spring Boot Actuator 使用和常用配置
Spring Boot Actuator 使用和常用配置
34 5
|
18天前
|
缓存 负载均衡 Java
SpringBoot 与 Nginx 配置优化:性能拉满的关键学习方法
【8月更文挑战第1天】在现代Web开发领域,SpringBoot以其快速启动、简化配置的特性成为众多开发者的首选框架,而Nginx则以其高性能的HTTP和反向代理服务器功能著称。将两者结合,并通过精细的配置优化,可以显著提升Web应用的性能与稳定性。以下是为您学生定制的SpringBoot与Nginx配置优化的学习方法与研究路径。
36 1
|
23天前
|
监控 druid Java
spring boot 集成配置阿里 Druid监控配置
spring boot 集成配置阿里 Druid监控配置
121 6
|
22天前
|
Java Spring
idea新建spring boot 项目右键无package及java类的选项
idea新建spring boot 项目右键无package及java类的选项
33 5