Apache Shiro简单应用

Apache Shiro简单应用

  • 介绍
  • 功能点注解
  • 角色注解

本文不介绍具体的集成,如有需要自行百度,此应用是基于springboot+Thymeleaf,其他框架操作类型。

介绍

Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。
三个核心组件:Subject, SecurityManager 和 Realms。

  • Subject:即“当前操作用户”。但是,在Shiro中,Subject这一概念并不仅仅指人,也可以是第三方进程、后台帐户(Daemon Account)或其他类似事物。它仅仅意味着“当前跟软件交互的东西”。
    Subject代表了当前用户的安全操作,SecurityManager则管理所有用户的安全操作。

  • SecurityManager:它是Shiro框架的核心,典型的Facade模式,Shiro通过SecurityManager来管理内部组件实例,并通过它来提供安全管理的各种服务。

  • Realm: Realm充当了Shiro与应用安全数据间的“桥梁”或者“连接器”。也就是说,当对用户执行认证(登录)和授权(访问控制)验证时,Shiro会从应用配置的Realm中查找用户及其权限信息。

  • 流程:应用程序 - Subject - SecurityManager - Realm - 安全数据。

  • 用户登录时,不管密码是否正确,Shiro都会把用户信息存到Realm中,前台登录信息和Realm中正确的用户信息对比,信息正确就认证成功。

功能点注解

 //在ShiroConfig类中,开启Shiro功能点注解通知器
    @Bean
    public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(
            @Qualifier("securityManager") SecurityManager securityManager) {
        AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor();
        authorizationAttributeSourceAdvisor.setSecurityManager(securityManager);
        return authorizationAttributeSourceAdvisor;
    }
  • 后台使用,没有配置此注解的请求不会被限制访问,需要在"菜单管理"中配置cms:event:view
    @RequiresPermissions("cms:event:view")
    @GetMapping()
    public String event() {
        return "cms/event/event";
    }
  • 前台使用
    在HTML标签上配置shiro:hasPermission="cms:event:add"即可

角色注解

 //在ShiroConfig类中,开启Shiro角色注解通知器
  @Bean
    public LifecycleBeanPostProcessor lifecycleBeanPostProcessor(){
        return new LifecycleBeanPostProcessor();
    }
    @Bean
    public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator(){
        DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator = new DefaultAdvisorAutoProxyCreator();
        defaultAdvisorAutoProxyCreator.setProxyTargetClass(true);
        return defaultAdvisorAutoProxyCreator;
    }
  • 后台使用,只有admin角色用户才能访问
    @RequiresRoles("admin")
    @GetMapping()
    public String event() {
        return "cms/event/event";
    }
  • 前台使用
    在HTML标签上配置shiro:hasRole="admin"即可

你可能感兴趣的:(shiro)