展开菜单
首页 精品内容 本月促销 装机必备 Windows PDF教程 macOS软件 IOS软件 Android AI 专题
全部分类

当前位置:

首页 > 编程开发 > Java中Apache Shiro安全框架怎么用

Java中Apache Shiro安全框架怎么用

一、Shiro简介:ApacheShiro是一个Java的安全(权限)框架。Shiro可以非常容易的开发出足够好的应用,其不仅可以用在JavaSE环境,也可以用在JavaEE环境。Shiro可以完成,认证,授权,加密,会话管理,Web集成,缓存等。shiro功能:Authentication:身份认证、登录,验证用户是不是拥有相应的身份;Authorization:授权,即权限验证,验证某个已认证的用户是否拥有某个权限,即判断用户能否进行什么操作,如:验证某个用户是否拥有某个角色,或者细粒度的验证某个用户

本文目录

      一、Shiro简介:

      Apache Shiro是一个Java的安全(权限)框架。
      Shiro 可以非常容易的开发出足够好的应用,其不仅可以用在JavaSE环境,也可以用在JavaEE环境。Shiro可以完成,认证,授权,加密,会话管理,Web集成,缓存等。

      Java中Apache Shiro安全框架怎么用

      shiro功能:

      Java中Apache Shiro安全框架怎么用

      Authentication:身份认证、登录,验证用户是不是拥有相应的身份;
      Authorization:授权,即权限验证,验证某个已认证的用户是否拥有某个权限,即判断用户能否进行什么操作,如:验证某个用户是否拥有某个角色,或者细粒度的验证某个用户对某个资源是否具有某个权限!
      Session Manager:会话管理,即用户登录后就是第一次会话,在没有退出之前,它的所有信息都在会话中;会话可以是普通的JavaSE环境,也可以是Web环境;
      Cryptography:加密,保护数据的安全性,如密码加密存储到数据库中,而不是明文存储;Web Support: Web支持,可以非常容易的集成到Web环境;
      Caching:缓存,比如用户登录后,其用户信息,拥有的角色、权限不必每次去查,这样可以提高效率
      Concurrency: Shiro支持多线程应用的并发验证,即,如在一个线程中开启另一个线程,能把权限自动的传播过去
      Testing:提供测试支持;
      Run As:允许一个用户假装为另一个用户(如果他们允许)的身份进行访问;
      Remember Me:记住我,这个是非常常见的功能,即一次登录后,下次再来的话不用登录了

      Shiro架构(外部)

      从外部来看Shiro,即从应用程序角度来观察如何使用shiro完成工作:

      Java中Apache Shiro安全框架怎么用

      subject:应用代码直接交互的对象是Subject,也就是说Shiro的对外API核心就是Subject,Subject代表了当前的用户,这个用户不一定是一个具体的人,与当前应用交互的任何东西都是Subject,如网络爬虫,机器人等,与Subject的所有交互都会委托给SecurityManager; Subject其实是一个门面,SecurityManageer才是实际的执行者
      SecurityManager: 安全管理器,即所有与安全有关的操作都会与SercurityManager交互,并且它管理着所有的Subject,可以看出它是Shiro的核心,它负责与Shiro的其他组件进行交互,它相当于SpringMVC的
      DispatcherServlet的角色
      Realm: Shiro从Realm获取安全数据((如用户,角色,权限),就是说SecurityManager要验证用户身份,那么它需要从Realm 获取相应的用户进行比较,来确定用户的身份是否合法;也需要从Realm得到用户相应的角色、权限,进行验证用户的操作是否能够进行,可以把Realm看成DataSource;

      Shiro架构(内部)

      Java中Apache Shiro安全框架怎么用

      subject:任何可以与应用交互的'用户';
      Security Manager:相当于SpringMVC中的DispatcherServlet;是Shiro的心脏,所有具体的交互都通过Security Manager进行控制,它管理者所有的Subject,且负责进行认证,授权,会话,及缓存的管理.

      Authenticator:负责Subject认证,是一个扩展点,可以自定义实现;可以使用认证策略(AuthenticationStrategy),即什么情况下算用户认证通过了;
      Authorizer: 授权器,即访问控制器,用来决定主体是否有权限进行相应的操作;即控制着用户能访问应用中的那些功能;
      Realm:可以有一个或者多个的realm,可以认为是安全实体数据源,即用于获取安全实体的,可以用DBC实现,也可以是内存实现等等,由用户提供;所以一般在应用中都需要实现自己的realm
      SessionManager: 管理Session生命周期的组件,而Shiro并不仅仅可以用在Web环境,也可以用在普通的JavaSE环境中
      CacheManager:缓存控制器,来管理如用户,角色,权限等缓存的;因为这些数据基本上很少以受,成到缓存中后可以提高访问的性能;
      Cryptography:密码模块,Shiro提高了一些常见的加密组件用于密码加密,解密等

      二、快速入门

      1.拷贝案例

      1.按照官网提示找到 快速入门案例 GitHub地址:shiro/samples/quickstart/

      Java中Apache Shiro安全框架怎么用

      2.新建一个 Maven 工程,删除其 src 目录,将其作为父工程

      3.在父工程中新建一个 Maven 模块

      4.复制快速入门案例 POM.xml 文件中的依赖

      
              
                  org.apache.shiro
                  shiro-core
                  1.4.1
              
       
              
              
                  org.slf4j
                  jcl-over-slf4j
                  1.7.29
              
              
                  org.slf4j
                  slf4j-log4j12
                  1.7.29
              
              
                  log4j
                  log4j
                  1.2.17
              
          

      5.把快速入门案例中的 resource 下的log4j.properties复制下来

      6.复制一下shiro.ini文件

      7.复制一下Quickstart.java文件

      8.运行启动Quickstart.java

      Java中Apache Shiro安全框架怎么用

      2.分析代码

      public class Quickstart {
          private static final transient Logger log = LoggerFactory.getLogger(Quickstart.class);
          public static void main(String[] args) {
              //工厂模式,通过shiro.ini配置文件中的信息,生成一个工厂实例
              Factory factory = new IniSecurityManagerFactory("classpath:shiro.ini");
              SecurityManager securityManager = factory.getInstance();
              SecurityUtils.setSecurityManager(securityManager);
              //获取当前的用户对象Subject
              Subject currentUser = SecurityUtils.getSubject();
              //通过当前用户拿到session
              Session session = currentUser.getSession();
              session.setAttribute("someKey", "aValue");
              String value = (String) session.getAttribute("someKey");
              if (value.equals("aValue")) {
                  log.info("Subject=>session[" + value + "]");
              }
              //判断当前的用户是否被认证
              if (!currentUser.isAuthenticated()) {
                  //Token :令牌,没有获取,随机
                  UsernamePasswordToken token = new UsernamePasswordToken("lonestarr", "vespa");
                  token.setRememberMe(true);  //设置记住我
                  try {
                      currentUser.login(token); //执行了登录操作
                  } catch (UnknownAccountException uae) {
                      //如果   用户名不存在
                      log.info("There is no user with username of " + token.getPrincipal());
                  } catch (IncorrectCredentialsException ice) {
                      //如果   密码不正确
                      log.info("Password for account " + token.getPrincipal() + " was incorrect!");
                  } catch (LockedAccountException lae) {
                      //用户被锁定,如密码输出过多,则被锁定
                      log.info("The account for username " + token.getPrincipal() + " is locked.  " +
                              "Please contact your administrator to unlock it.");
                  }
                  //...在此处捕获更多异常
                  catch (AuthenticationException ae) {
                      //意外情况 ? 错误 ?
                  }
              }
              //打印其标识主体(在这种情况下,为用户名)
              log.info("User [" + currentUser.getPrincipal() + "] logged in successfully.");
       
              //测试角色是否存在
              if (currentUser.hasRole("schwartz")) {
                  log.info("May the Schwartz be with you!");
              } else {
                  log.info("Hello, mere mortal.");
              }
              //粗粒度,极限范围小
              //测试类型化的极限(不是实例级别)
              if (currentUser.isPermitted("lightsaber:wield")) {
                  log.info("You may use a lightsaber ring.  Use it wisely.");
              } else {
                  log.info("Sorry, lightsaber rings are for schwartz masters only.");
              }
              //细粒度,极限范围广
              //实例级别的权限(非常强大)
              if (currentUser.isPermitted("winnebago:drive:eagle5")) {
                  log.info("You are permitted to 'drive' the winnebago with license plate (id) 'eagle5'.  " +
                          "Here are the keys - have fun!");
              } else {
                  log.info("Sorry, you aren't allowed to drive the 'eagle5' winnebago!");
              }
              //注销
              currentUser.logout();
              //退出
              System.exit(0);
          }
      }

      三、SpringBoot 集成 Shiro

      1.编写测试环境

      1.在刚刚的父项目中新建一个 springboot 模块

      Java中Apache Shiro安全框架怎么用

      2.导入 SpringBoot 和 Shiro 整合包的依赖

       
              
                  org.apache.shiro
                  shiro-spring
                  1.4.1
              

      下面是编写配置文件
      Shiro 三大要素

      Subject 用户 -> ShiroFilterFactoryBean
      SecurityManager 管理所有用户 -> DefaultWebSecurityManager
      Realm 连接数据

      实际操作中对象创建的顺序 : realm -> securityManager -> subject

      3.编写自定义的 realm ,需要继承 AuthorizingRealm

      //自定义的 UserRealm        extends AuthorizingRealm
      public class UserRealm extends AuthorizingRealm {
          //授权
          @Override
          protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
              //打印一个提示
              System.out.println("执行了授权方法");
              return null;
          }
       
          //认证
          @Override
          protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
              //打印一个提示
              System.out.println("执行了认证方法");
              return null;
          }
      }

      4.新建一个ShiroConfig配置文件

      @Configuration
      public class ShiroConfig {
       
          //ShiroFilterFactoryBean:3
          @Bean
          public ShiroFilterFactoryBean getShiroFilterFactoryBean(@Qualifier("securityManager") DefaultWebSecurityManager defaultWebsecurityManager){
              ShiroFilterFactoryBean bean = new ShiroFilterFactoryBean();
              //设置安全管理器
              bean.setSecurityManager(defaultWebsecurityManager);
              return bean;
          }
          //DefaultWebSecurityManager:2
          @Bean(name="securityManager")
          public DefaultWebSecurityManager getDefaultWebSecurityManager(@Qualifier("userRealm") UserRealm userRealm){
              DefaultWebSecurityManager securityManager=new DefaultWebSecurityManager();
              //关闭UserRealm
              securityManager.setRealm(userRealm);
              return securityManager;
          }
          //创建realm 对象,需要自定义类:1
          @Bean(name="userRealm")
          public UserRealm userRealm(){
              return new UserRealm();
          }
      }

      5.测试成功!

      Java中Apache Shiro安全框架怎么用

      2.使用

      1.登录拦截

      在getShiroFilterFactoryBean方法中添加需要拦截的登录请求

      @Configuration
      public class ShiroConfig {
       
          //ShiroFilterFactoryBean:3
          @Bean
          public ShiroFilterFactoryBean getShiroFilterFactoryBean(@Qualifier("securityManager") DefaultWebSecurityManager defaultWebsecurityManager){
              ShiroFilterFactoryBean bean = new ShiroFilterFactoryBean();
              //设置安全管理器
              bean.setSecurityManager(defaultWebsecurityManager);
              //添加shiro的内置过滤器
              /*
                  anon : 无需认证,就可以访问
                  authc : 必须认证了才能访问
                  user : 必须拥有 “记住我” 功能才能用
                  perms : 拥有对某个资源的权限才能访问
                  role : 拥有某个角色权限才能访问
               */
       
              filterMap.put("/user/add","authc");
              filterMap.put("/user/update","authc");
              //拦截
              Map filterMap=new LinkedHashMap<>();
              filterMap.put("/user/*","authc");
              bean.setFilterChainDefinitionMap(filterMap);
       
      //        //设置登录的请求
      //        bean.setLoginUrl("/toLogin");
              return bean;
          }

      测试:点击 add链接,不会跳到 add 页面,而是跳到登录页,拦截成功

      Java中Apache Shiro安全框架怎么用

      2.用户认证

      1.在Controller层写一个登录的方法

      //登录的方法
          @RequestMapping("/login")
          public String login(String username, String password, Model model) {
              //获取当前用户
              Subject subject = SecurityUtils.getSubject();
              //封装用户的登录数据,获得令牌
              UsernamePasswordToken token = new UsernamePasswordToken(username, password);
              //登录 及 异常处理
              try {
                  //执行用户登录的方法,如果没有异常就说明OK了
                  subject.login(token);
                  return "index";
              } catch (UnknownAccountException e) {
                  //如果用户名不存在
                  System.out.println("用户名不存在");
                  model.addAttribute("msg", "用户名错误");
                  return "login";
              } catch (IncorrectCredentialsException ice) {
                  //如果密码错误
                  System.out.println("密码错误");
                  model.addAttribute("msg", "密码错误");
                  return "login";
              }
          }
      }

      2.测试

      Java中Apache Shiro安全框架怎么用

      可以看出是先执行了自定义的UserRealm中的AuthenticationInfo方法,再执行登录相关的操作

      3.修改UserRealm中的doGetAuthenticationInfo方法

      //认证
          @Override
          protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
              //打印一个提示
              System.out.println("执行了认证方法");
              // 用户名密码
              String name = "root";
              String password = "123456";
              //通过参数获取登录的控制器中生成的 令牌
              UsernamePasswordToken token = (UsernamePasswordToken) authenticationToken;
              //用户名认证
              if (!token.getUsername().equals(name)){
                  // return null UnKnownAccountException
                  return null;
              }
              //密码认证, Shiro 自己做,为了避免和密码的接触
              //最后返回一个 AuthenticationInfo 接口的实现类,这里选择 SimpleAuthenticationInfo
              // 三个参数:获取当前用户的认证 ; 密码 ; 认证名
              return new SimpleAuthenticationInfo("", password, "");
          }
      }

      4.测试,输入错误的密码

      Java中Apache Shiro安全框架怎么用

      Java中Apache Shiro安全框架怎么用

      输入正确的密码,即可登录成功

      四、Shiro整合Mybatis

      1.导入依赖

      
                  mysql
                  mysql-connector-java
                  8.0.19
              
       
              
                  log4j
                  log4j
                  1.2.17
              
       
              
                  com.alibaba
                  druid
                  1.1.12
              
             
                  org.mybatis.spring.boot
                  mybatis-spring-boot-starter
                  2.1.1
              

      2.新建个application.yml

      spring:
        datasource:
          username: root
          password: 123456
          url: jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
          driver-class-name: com.mysql.cj.jdbc.Driver
          type: com.alibaba.druid.pool.DruidDataSource
       
          #Spring Boot 默认是不注入这些属性值的,需要自己绑定
          #druid 数据源专有配置
          initialSize: 5
          minIdle: 5
          maxActive: 20
          maxWait: 60000
          timeBetweenEvictionRunsMillis: 60000
          minEvictableIdleTimeMillis: 300000
          validationQuery: SELECT 1 FROM DUAL
          testWhileIdle: true
          testOnBorrow: false
          testOnReturn: false
          poolPreparedStatements: true
       
          #配置监控统计拦截的filters,stat:监控统计、log4j:日志记录、wall:防御sql注入
          #如果允许时报错  java.lang.ClassNotFoundException: org.apache.log4j.Priority
          #则导入 log4j 依赖即可,Maven 地址:https://mvnrepository.com/artifact/log4j/log4j
          filters: stat,wall,log4j
          maxPoolPreparedStatementPerConnectionSize: 20
          useGlobalDataSourceStat: true
          connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
      mybatis:
        type-aliases-package: com.huang.pojo
        mapper-locations: classpath:mybatis/mapper/*.xml

      3.在application.properties

      mybatis.type-aliases-package=com.longdi.pojo
      mybatis.mapper-locations=classpath:mapper/*.xml

      4.导入依赖

      
                  org.projectlombok
                  lombok
                  1.18.10
                  provided
              

      5.编写User类

      @Data
      @AllArgsConstructor
      @NoArgsConstructor
      public class User {
              private int id;
              private String name;
              private String pwd;
              private String perms;
      }

      6.编写UserMapper

      @Repository
      @Mapper
      public interface UserMapper {
          public User  queryUserByName(String name);
       
      }

      7.编写UserMapper.xml

      
      
       
      
       
          
              select * from mybatis.user where name=#{name}
          
       
      

      8.Service层

      UserService接口:

      public interface UserService {
          public User queryUserByName(String name);
      }

      9.编写接口实现类UserServiceImpl

      @Service
      public class UserServiceImpl implements UserService{
       
          @Autowired
          UserMapper userMapper;
       
          @Override
          public User queryUserByName(String name) {
              return userMapper.queryUserByName(name);
          }
      }

      10.在ShiroSpringbootApplicationTests测试

      @SpringBootTest
      class ShiroSpringbootApplicationTests {
          @Autowired
          UserServiceImpl userService;
          @Test
          void contextLoads() {
              System.out.println(userService.queryUserByName("longdi"));
          }
      }

      11.成功连接数据库

      五、实现请求授权

      1.在ShiroConfig类中修改

      Java中Apache Shiro安全框架怎么用

      2.controller跳转

      Java中Apache Shiro安全框架怎么用

      3.登录拦截授权,测试成功

      Java中Apache Shiro安全框架怎么用

      Java中Apache Shiro安全框架怎么用

      4.编写授权doGetAuthorizationInfo方法

      Java中Apache Shiro安全框架怎么用

      5.请求授权测试成功

      六、Shiro整合Thymeleaf

      1.导入依赖

      
              
                  com.github.theborakompanioni
                  thymeleaf-extras-shiro
                  2.0.0
              

      2.整合ShiroDialect

      Java中Apache Shiro安全框架怎么用

      3.index.html

      Java中Apache Shiro安全框架怎么用

      4.测试

      Java中Apache Shiro安全框架怎么用

      5.在认证里放session

      Java中Apache Shiro安全框架怎么用

      6.修改index.html

      Java中Apache Shiro安全框架怎么用

      本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
      作者最新文章
      编程开发 Java apache
      相关文章 更多
      精品专题 更多
      装机必备

      正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

      Windows

      正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

      PDF教程

      正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

      macOS软件

      正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

      IOS软件

      正软商城iOS软件专区,精选适用于iPhone和iPad的办公、学习、影音、设计、效率及AI应用,提供功能介绍、适用设备、系统要求和正版获取方式等信息。

      AI

      正软商城AI软件专区,汇集AI写作、AI绘画、AI视频、AI办公、AI编程、AI翻译、智能客服和数据分析等人工智能工具,提供功能介绍、适用平台、收费方式及正版购买信息。

      Mac软件 更多
      讯飞智作 网页版
      讯飞智作 网页版

      讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

      火山引擎 网页版
      火山引擎 网页版

      火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

      Aperty macOS版
      Aperty macOS版

      Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

      立刻MV 网页版
      立刻MV 网页版

      立刻MV 面向音乐人、内容创作者和品牌团队,帮助用户低成本完成歌曲 MV、歌词视频、AI 分镜、图生视频与最终合成。

      蛙蛙写作 网页版
      蛙蛙写作 网页版

      蛙蛙写作 AI 创作工具,覆盖小说、剧本、文案,一键生成文稿,打通文字转视频全流程,高效解决创作难题。

      超级简历WonderCV 网页版
      超级简历WonderCV 网页版

      超级简历WonderCV是面向应届生和AI小白的智能求职平台,覆盖简历、面试与职业规划。

      音述AI 网页版
      音述AI 网页版

      音述AI,是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区。

      AionClaw macOS版
      AionClaw macOS版

      AionClaw 是可在桌面端运行的任务型 AI 助手,通过数字专家与技能市场组合办公、创作、数据和开发能力。

      Loomy macOS版
      Loomy macOS版

      Loomy 是科大讯飞推出的桌面 AI 助手,可通过对话、任务与工作目录协助处理办公、内容创作和资料整理。

      AirBuddy 3 macOS版
      AirBuddy 3 macOS版

      AirBuddy 3 是面向 macOS 的蓝牙外设增强工具,可集中查看 AirPods、Beats 与苹果设备电量,提供快速连接、播放控制、电量提醒、桌面小组件和多台 Mac 外设接力等功能。

      AirServer macOS版
      AirServer macOS版

      AirServer macOS版可把 Mac 转换为无线投屏接收端,通过 AirPlay 或 Google Cast 接收手机、平板和电脑画面,并支持多设备同时连接、高清镜像及会话录制,适合家庭娱乐、课堂教学、会议演示和应用展示。

      AnyDesk macOS版
      AnyDesk macOS版

      AnyDesk macOS版是一款适用于远程办公、设备维护和客户支持的远程桌面工具,可连接并操作异地计算机,支持文件传输、无人值守访问、会话权限控制及跨平台协作。

      WINDOWS 更多
      讯飞智作 网页版
      讯飞智作 网页版

      讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

      火山引擎 网页版
      火山引擎 网页版

      火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

      PixTV 网页版
      PixTV 网页版

      PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。

      讯飞绘文 网页版
      讯飞绘文 网页版

      讯飞绘文网页版是科大讯飞推出的AI图文创作与内容运营工具,覆盖热点选题、文章生成、稿件校对、智能配图、排版发布和数据复盘等环节,适合自媒体创作者及内容团队在线使用。

      Maya(Autodesk Maya) Windows版
      Maya(Autodesk Maya) Windows版

      Autodesk Maya 是面向影视、电视、动画和游戏行业的专业三维制作软件,集多边形与 NURBS 建模、角色绑定、关键帧和动作捕捉动画、Bifrost 特效模拟、材质开发及 Arnold 渲染于一体,

      Aperty Windows版
      Aperty Windows版

      Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

      立刻MV 网页版
      立刻MV 网页版

      立刻MV 面向音乐人、内容创作者和品牌团队,帮助用户低成本完成歌曲 MV、歌词视频、AI 分镜、图生视频与最终合成。

      蛙蛙写作 网页版
      蛙蛙写作 网页版

      蛙蛙写作 AI 创作工具,覆盖小说、剧本、文案,一键生成文稿,打通文字转视频全流程,高效解决创作难题。

      超级简历WonderCV 网页版
      超级简历WonderCV 网页版

      超级简历WonderCV是面向应届生和AI小白的智能求职平台,覆盖简历、面试与职业规划。

      音述AI 网页版
      音述AI 网页版

      音述AI,是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区。

      AionClaw Windows版
      AionClaw Windows版

      AionClaw 是可在桌面端运行的任务型 AI 助手,通过数字专家与技能市场组合办公、创作、数据和开发能力。

      Loomy Windows版
      Loomy Windows版

      Loomy 是科大讯飞推出的桌面 AI 助手,可通过对话、任务与工作目录协助处理办公、内容创作和资料整理。